从毫升命令行转换毫秒时间戳到日期

时间:2012-09-11 03:58:21

标签: unix date awk

我知道

date -d @<timestamp in seconds>

awk '{print strftime("%c", <timestamp in seconds>)}'

但是如果我有毫秒的话怎么办?有没有简单的方法可以在不删除毫秒时间戳的最后三个字符的情况下执行此操作(不是说删除字符很困难,但我认为这样一个简单的任务会有一步到位的方法)?

6 个答案:

答案 0 :(得分:22)

除了丢弃字符,你可以除以1000:

awk '{print strftime("%c", ( <timestamp in milliseconds> + 500 ) / 1000 )}'

或者:

date -d @$(  echo "(MilliSecondTimeStamp + 500) / 1000" | bc)

编辑:调整商数而不是除数。 编辑2:Thx zeekvfu,修复。

答案 1 :(得分:13)

perl -e 'print scalar localtime(<timestamp> / 1000)'

答案 2 :(得分:12)

我在Mac上的bash个人资料中有什么:

day() {
  date -r $(($1 / 1000))
}

day 1486743904359返回Fri Feb 10 08:25:04 PST 2017

答案 3 :(得分:1)

这对bash来说对我来说很好,并且比上面接受的答案要简单一些:

requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP>', port=443): Max retries exceeded with url: /test/ (Caused by SSLError(SSLCertVerificationError("hostname '<IP>' doesn't match '<IP>'")))

答案 4 :(得分:0)

在Greg的perl方法上进行扩展,我使用此Perl脚本https://github.com/moose1089/epoch2iso自动扫描时代时间戳记并转换为ISO8061。

此脚本处理秒和毫秒。

由于它可以转换找到的任何数字,因此您不必提取带有时间戳的特定字段,但是相反,它也可以转换原本不是时间的数字。

答案 5 :(得分:0)

在BASH中

ms_date=1603884641215; date -d @$((ms_date/1000))