3

有没有办法在 bash 中获取午夜过后的当前毫秒数?如果有办法完全在 bash 中完成,那么该时间戳的精度有多好或多差?

4

2 回答 2

13

您可以通过以下方式获得今天的午夜:

date -d 'today 00:00:00'

在 UNIX 邮票中:

date -d 'today 00:00:00' "+%s"

因此,如果您想获得差异,请执行以下操作:

midnight=$(date -d 'today 00:00:00' "+%s")
now=$(date "+%s")
diff_mills=$(( ($now - $midnight) * 1000 ))

表示%s秒,我们必须*1000得到毫秒。


使用%N(纳秒):

midnight=$(date -d 'today 00:00:00' "+%s.%N")
now=$(date "+%s.%N")
diff_mills=$(echo "( $now - $midnight ) * 1000" | bc)
于 2013-04-23T12:44:51.250 回答
3

您也可以使用 mod 而不是明确的日期差异。例如,分辨率为 1 秒:

millis_since_midnight=$[1000 * ( ( `date "+%s"` - 28800 ) % 86400 )]

请注意,28800 是与 UTC 的 PST 偏移量(以秒为单位)。在像 OSX 这样具有 BSD 时间并因此缺乏指定--date 'today 00:00:00'.

于 2013-07-23T18:44:48.917 回答