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

jon*_*rry 28 unix awk date

我知道

date -d @<timestamp in seconds>
Run Code Online (Sandbox Code Playgroud)

awk '{print strftime("%c", <timestamp in seconds>)}'
Run Code Online (Sandbox Code Playgroud)

但是如果我有毫秒的话呢?在没有删除毫秒时间戳的最后三个字符的情况下,有没有简单的方法可以做到这一点(不是说丢失字符是困难的,但我认为这样一个简单的任务会有一步一步)?

joe*_*epd 25

而不是丢失字符,你可以除以1000:

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

要么:

date -d @$(  echo "(MilliSecondTimeStamp + 500) / 1000" | bc)
Run Code Online (Sandbox Code Playgroud)

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

  • 除以1000将舍入错误。在shell中,下限整数将是答案。3800/1000将是3,而不是4。 (2认同)
  • 那么它只是一个非常基本的“ceil()”函数? (2认同)

Zah*_*eer 14

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

day() {
  date -r $(($1 / 1000))
}
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的日期副本(GNU coreutils date,8.26)中,-r选项是-r,--reference = FILE ...显示FILE的最后修改时间。我将您的bash算法与[Kugelman的日期调用](/sf/answers/227495551/)结合使用,并得到了所需的结果。 (2认同)

Gre*_*ill 13

perl -e 'print scalar localtime(<timestamp> / 1000)'
Run Code Online (Sandbox Code Playgroud)

  • +1我们都喜欢perl作为强大的命令行工具:) (2认同)
  • 实际上我发现"打印"这个词搞砸了字段的顺序.只需删除print关键字,即`cat mydata.csv | perl -pe的{(\ d {13})} {scalar localtime($ 1/1000)} ge'` (2认同)