37

我知道

date -d @<timestamp in seconds>

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

但是如果我有毫秒怎么办。是否有简单的方法可以在不删除毫秒时间戳的最后三个字符的情况下做到这一点(并不是说删除字符很困难,但我认为对于这样一个简单的任务会有一个一步的方法)?

4

6 回答 6

34

您可以除以 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,已修复。

于 2012-09-11T07:41:19.123 回答
16

我在 Mac 上的 bash 配置文件中有什么:

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

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

于 2017-02-10T18:23:33.010 回答
15
perl -e 'print scalar localtime(<timestamp> / 1000)'
于 2012-09-11T03:59:28.610 回答
2

在 BASH 中

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

解释:

  1. date -d @number-of-seconds接收秒数(自纪元)并返回格式化日期
  2. $(())表示 bash 中的数学插值,例如echo $((1 + 2))
  3. 将毫秒除以 1000 以获得所需的秒数测量值
  4. 添加 500 是为了以毫秒为单位,四舍五入到最接近的秒数
于 2020-10-29T13:40:01.143 回答
1

这在 bash 中对我很有用,而且比上面接受的答案要简单一些:

date -r $(( (<timestamp in milliseconds> + 500) / 1000 ))
于 2020-03-30T16:06:54.180 回答
0

扩展 Greg 的 perl 方法,我使用这个 Perl 脚本https://github.com/moose1089/epoch2iso自动扫描纪元时间戳并转换为 ISO8061。

此脚本处理秒和毫秒。

当它转换它找到的任何数字时,您不必使用时间戳提取特定字段,但相反它也可能转换不打算成为时间的数字。

于 2019-10-04T14:21:06.290 回答