我知道
date -d @<timestamp in seconds>
和
awk '{print strftime("%c", <timestamp in seconds>)}'
但如果我只有毫秒呢有没有简单的方法来做到这一点,而不删除毫秒时间戳的最后三个字符(并不是说删除字符很困难,但我认为有一个简单的任务一步到位的方法)?
dffbzjpn1#
除了删除字符,您可以除以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:Thx zeekvfu,fixed.
tcbh2hod2#
我在Mac上的bash配置文件中有:
day() { date -r $(($1 / 1000)) }
day 1486743904359返回Fri Feb 10 08:25:04 PST 2017
day 1486743904359
Fri Feb 10 08:25:04 PST 2017
bvuwiixz3#
perl -e 'print scalar localtime(<timestamp> / 1000)'
hwamh0ep4#
在BASH中
ms_date=1603884641215; date -d @$(((ms_date + 500)/1000))
解释:
date -d @number-of-seconds
$(())
echo $((1 + 2))
fzsnzjdm5#
这在bash中对我来说很有用,它比上面的公认答案简单一点:
date -r $(( (<timestamp in milliseconds> + 500) / 1000 ))
iszxjhcz6#
在Greg的perl方法的基础上进行扩展,我使用这个Perl脚本https://github.com/moose1089/epoch2iso自动扫描epoch时间戳并转换为ISO8061。此脚本处理秒和毫秒。因为它转换它找到的任何数字,所以您不必提取具有时间戳的特定字段,但相反,它也可能转换不打算作为时间的数字。
biswetbf7#
不需要损失任何精度:
ts=1684254777119 echo $(date -d @${ts:0:10} --utc --iso=s | cut -d '+' -f 1).${ts:10}+00:00
输出:
2023-05-16T16:32:57.119+00:00
也具有更高的精度:
ts=1684254777119581 echo $(date -d @${ts:0:10} --utc --iso=s | cut -d '+' -f 1).${ts:10}+00:00
2023-05-16T16:32:57.119581+00:00
wlzqhblo8#
你不需要使用date来保持精度:
date
echo 1684254777119 |
mawk '{ print strftime("%c ( %s." substr( $1, length($1) - 2) " )", int( $1 / 1000 ) ) }'
Tue May 16 12:32:57 2023 ( 1684254777.119 )
如果你的输入有这样的精度,你甚至可以达到纳秒级:
echo 5994354333719137839 |
gawk '{ print strftime("%c ( %s." substr( $1, length($1) - 8) " )", int( $1 / 10^9)) }'
Fri Dec 14 21:25:33 2159 ( 5994354333.719137839 )
8条答案
按热度按时间dffbzjpn1#
除了删除字符,您可以除以1000:
或者:
或者(MacOS):
编辑:调整商数而不是除法。Edit2:Thx zeekvfu,fixed.
tcbh2hod2#
我在Mac上的bash配置文件中有:
day 1486743904359
返回Fri Feb 10 08:25:04 PST 2017
bvuwiixz3#
hwamh0ep4#
在BASH中
解释:
date -d @number-of-seconds
接收秒(since-epoch)并返回格式化日期$(())
表示bash中的数学插值,例如echo $((1 + 2))
1.将毫秒除以1000以获得所需的秒测量值
1.为了将毫秒向上舍入到最接近的秒,添加500
fzsnzjdm5#
这在bash中对我来说很有用,它比上面的公认答案简单一点:
iszxjhcz6#
在Greg的perl方法的基础上进行扩展,我使用这个Perl脚本https://github.com/moose1089/epoch2iso自动扫描epoch时间戳并转换为ISO8061。
此脚本处理秒和毫秒。
因为它转换它找到的任何数字,所以您不必提取具有时间戳的特定字段,但相反,它也可能转换不打算作为时间的数字。
biswetbf7#
不需要损失任何精度:
输出:
也具有更高的精度:
输出:
wlzqhblo8#
你不需要使用
date
来保持精度:如果你的输入有这样的精度,你甚至可以达到纳秒级: