shell 脚本中的毫秒时间

shell 脚本中的毫秒时间

有人如何以毫秒为单位打印整个时间,例如 12:07:59:393(HH:MM:SS:milliseconds)。我发现很多帖子都说如何与 HHMMSS 一起打印毫秒,但我想以毫秒为单位打印实时时钟。我正在使用Linux。

答案1

这将告诉你自 Unix 纪元开始以来已经过去了多少毫秒:

date +%s%3N

您必须减少今天 00:00 之前经过的秒数*1000。或者您可以根据以下公式将所有内容转换为毫秒:

date +%H%M%S%3N

喜欢 :

h=$(date +%H)
m=$(date +%M)
s=$(date +%S)
ms=$(date +%3N)
echo $((10#$h*3600000 + 10#$m*60000 + 10#$s*1000 + 10#$ms))

执行此操作平均需要 4 毫秒,您可能不希望减少该时间。

编辑:如果变量之一中有前导零,则脚本将失败。我在变量名称前面添加了 10#,以去掉前导零,这样我们就得到了 8 而不是 08。

答案2

看看 perl 是否足够便携:

perl -MTime::HiRes=time -MPOSIX=strftime -e '
    $now = int(time() * 1000);
    printf "%s.%03d\n", strftime("%H:%M:%S", localtime(int($now/1000))), ($now % 1000);
'

时间::高分辨率POSIX都是核心 Perl 模块。

如果您只想要带有小数秒的纪元时间戳:

$ perl -MTime::HiRes=time -le 'print time()'
1462218218.49011

相关内容