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 变量,$
是可选的;即可以使用$value
或value
。
【讨论】:
以上是关于Bash将时代转换为日期,显示错误的时间的主要内容,如果未能解决你的问题,请参考以下文章