我知道
date -d @<timestamp in seconds>
和
awk '{print strftime("%c", <timestamp in seconds>)}'
但是如果我有毫秒怎么办。是否有简单的方法可以在不删除毫秒时间戳的最后三个字符的情况下做到这一点(并不是说删除字符很困难,但我认为对于这样一个简单的任务会有一个一步的方法)?
您可以除以 1000,而不是删除字符:
awk '{print strftime("%c", ( <timestamp in milliseconds> + 500 ) / 1000 )}'
或者:
date -d @$( echo "(MilliSecondTimeStamp + 500) / 1000" | bc)
或(MacOS):
gdate -d @$( echo "(MilliSecondTimeStamp + 500) / 1000" | bc)
编辑:调整商而不是除法。Edit2:谢谢 zeekvfu,已修复。
我在 Mac 上的 bash 配置文件中有什么:
day() {
date -r $(($1 / 1000))
}
day 1486743904359
返回Fri Feb 10 08:25:04 PST 2017
perl -e 'print scalar localtime(<timestamp> / 1000)'
在 BASH 中
ms_date=1603884641215; date -d @$(((ms_date + 500)/1000))
解释:
date -d @number-of-seconds
接收秒数(自纪元)并返回格式化日期$(())
表示 bash 中的数学插值,例如echo $((1 + 2))
这在 bash 中对我很有用,而且比上面接受的答案要简单一些:
date -r $(( (<timestamp in milliseconds> + 500) / 1000 ))
扩展 Greg 的 perl 方法,我使用这个 Perl 脚本https://github.com/moose1089/epoch2iso自动扫描纪元时间戳并转换为 ISO8061。
此脚本处理秒和毫秒。
当它转换它找到的任何数字时,您不必使用时间戳提取特定字段,但相反它也可能转换不打算成为时间的数字。