将毫秒添加到现有的 Unix 时间

将毫秒添加到现有的 Unix 时间

我有一个脚本,以秒为单位返回 Unix 时间,例如 1374521719。我想获取这个时间并将毫秒数添加到其中。其他帖子显示一个包含当前时间的简单示例:

echo $(($(date +%s%N)/1000000))

当我的脚本接受 Unix 时间的输入时,我该如何将当前毫秒数添加到其中(如果这有意义的话)?

答案1

您可以将现有的 Unix 时间戳(以秒为单位)转换为毫秒,然后将毫秒数添加到其中。

要将秒转换为毫秒,只需乘以 1000(或附加“000”,以更方便为准)。

要添加自己的毫秒数,只需使用 bash 对算术表达式的支持即可。要获取当前秒后的毫秒数,可以使用日期的+%N格式说明符(输出秒后的纳秒数),然后除以 10^6 即可得到毫秒数。

综合起来,如果您已经有一个get_seconds输出自纪元以来的秒数的脚本或函数,我们会得到:

echo $(( ($(get_seconds) * 1000) + ($(date +%N) / 1000000) ))

     ^^^  ^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^
     |    |                         |_ convert ns past sec to ms
     |    |
     |    |_ convert seconds to ms
     |
     |_ bash arithmetric expression

请注意,这会合并两个完全独立的时间戳,因此虽然您可以获得更高的位数(精度),但报告时间的准确性并没有提高。事实上,如果(比如说)在第二个转折点发生某事,第一部分可能与第二个 X 有关,而第二部分可能与第二个 X+1 有关,这可能会导致结果值偏离近一秒。(由于第二个边界,您应该得到 X.998,但却得到了 X.002。)

坦率地说,我看不出这有什么用处,比如说,只需在秒数后附加“500”即可获得半秒的毫秒数(您仍然会偏离一些量,但可以将最大误差减少大约一半)。

相关内容