Bash将时代转换为日期,显示错误的时间

Posted

技术标签:

【中文标题】Bash将时代转换为日期,显示错误的时间【英文标题】:Bash convert epoch to date, showing wrong time 【发布时间】:2013-04-25 01:40:17 【问题描述】:

日期怎么会转换成错误的时间?

result=$(ls /path/to/file/File.*)
#/path/to/file/File.1361234760790

currentIndexTime=$result##*.
echo "$currentIndexTime"
#1361234760790

date -d@"$currentIndexTime"
#Tue 24 Oct 45105 10:53:10 PM GMT

【问题讨论】:

1361234760790 / (60*60*24*365) = 43164.47 年 不确定这说明了什么? 大约 43164 + 1970 ~= 45105(更准确地说是 43135.8 + 1970)所以日期是正确的 有意思,这个日期怎么打印正确? 使用epochconverter.com,我得到GMT: Tue, 19 Feb 2013 00:46:00 GMT,这是想要的结果 【参考方案1】:

这个特定的时间戳是自纪元以来的毫秒数,而不是自纪元以来的标准秒数。除以 1000:

$ date -d @1361234760.790
Mon Feb 18 17:46:00 MST 2013

【讨论】:

是的,它是由于时间戳(以毫秒为单位)。我还在这里检查了epochconvert.com 并得到了正确的结果2013 年 2 月 19 日星期二,格林威治标准时间上午 12:46:00【参考方案2】:

对于 Mac OS X,它是 date -r <timestamp_in_seconds_with_no_fractions>

$ date -r 1553024528
Tue Mar 19 12:42:08 PDT 2019

$ date -r `expr 1553024527882 / 1000`
Tue Mar 19 12:42:07 PDT 2019

$ date -r $((1553024527882/1000))
Tue Mar 19 12:42:07 PDT 2019

【讨论】:

【参考方案3】:

您可以使用 bash 算术扩展来执行除法:

date -d @$((value/1000))

请注意,“value”是一个 bash 变量,$ 是可选的;即可以使用$valuevalue

【讨论】:

以上是关于Bash将时代转换为日期,显示错误的时间的主要内容,如果未能解决你的问题,请参考以下文章

QwtPlot 显示错误的日期/时间

将字符串转换为日期时间错误 [重复]

将 UTC 日期和时间转换为 UNIX 时间会给出错误的(时区不同)值。为啥?

ObjectMapper 正在转换为错误的日期时间

将字符串转换为 NSDate 给出错误的日期

Java将日期转换为纪元值会产生错误的输出