从unix命令行将毫秒时间戳转换为日期
我知道从unix命令行将毫秒时间戳转换为日期,unix,date,awk,Unix,Date,Awk,我知道 date -d @<timestamp in seconds> date-d@ 及 awk'{print strftime(“%c”,)} 但是如果我有毫秒呢。在不删除毫秒时间戳的最后三个字符的情况下,有没有一种简单的方法可以做到这一点(虽然删除字符并不困难,但我认为对于这样一个简单的任务,有一种一步的方法)?perl-e'print scalar localtime(/1000)“ 您可以除以1000,而不是删除字符: awk '{print strftime(&qu
date -d @<timestamp in seconds>
date-d@
及
awk'{print strftime(“%c”,)}
但是如果我有毫秒呢。在不删除毫秒时间戳的最后三个字符的情况下,有没有一种简单的方法可以做到这一点(虽然删除字符并不困难,但我认为对于这样一个简单的任务,有一种一步的方法)?perl-e'print scalar localtime(/1000)“
您可以除以1000,而不是删除字符:
awk '{print strftime("%c", ( <timestamp in milliseconds> + 500 ) / 1000 )}'
或(MacOS):
编辑:根据商而不是除法进行调整。
Edit2:Thx zeekvfu,已修复。我在Mac上的bash配置文件中的内容:
day() {
date -r $(($1 / 1000))
}
day 1486743904359
返回Fri Feb 10 08:25:04 PST 2017
扩展Greg的perl方法,我使用此perl脚本自动扫描历元时间戳并转换为ISO8061
此脚本同时处理秒和毫秒
当它转换找到的任何数字时,您不必提取带有时间戳的特定字段,但相反,它也可以转换不打算用作时间的数字。这对我在bash中非常有用,并且比上面接受的答案简单一些:
date -r $(( (<timestamp in milliseconds> + 500) / 1000 ))
date-r$(+500)/1000))
在BASH中
ms_date=1603884641215;日期-d@$((ms_日期+500)/1000))
解释:
date-d@number of seconds
接收秒数(从历元开始),并返回格式化的日期$(())
表示bash中的数学插值,例如echo$((1+2))
在看到科学记数法中除法的输出后,没有意识到awk解决方案会起作用。
date
命令根本不起作用。正确的答案应该是date-d@$(echo)(毫秒时间戳+500)/1000“| bc)
。你们能告诉我这样做有什么不好:echo$(${毫秒时间戳}/1000))
?除以1000将舍入错误。在shell中,地板整数将是答案3800/1000
将是3
,而不是4
。因此它只是一个非常基本的ceil()
函数?对于查看具有时间戳的csv数据非常有用:)中的cat mydata.csv | perl-pe's{(\d{13}}}{print scalar localtime($1/1000)}ge'
gnucoreutils-date,8.26
-r
选项是-r、-reference=FILE。。。显示文件的上次修改时间
。我使用了你的bash算法,得到了我需要的结果。你为什么加500?这与bash数学插值的工作原理有关吗?我只是从上面复制了该算法,并将其转换为bash语法,但在任何给定的情况下,除以1000都会向上取整,而不是向下取整。
date -d @$( echo "(MilliSecondTimeStamp + 500) / 1000" | bc)
gdate -d @$( echo "(MilliSecondTimeStamp + 500) / 1000" | bc)
day() {
date -r $(($1 / 1000))
}
date -r $(( (<timestamp in milliseconds> + 500) / 1000 ))