Answers:
使用GNU,date
您可以执行以下操作:
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(来自:BASH:将Unix时间戳转换为Date)
在OS X上,使用date -r
。
date -r "$TIMESTAMP"
或者,使用strftime()
。它不能直接从外壳程序获得,但可以通过gawk进行访问。该%c
说明符以语言环境相关的方式显示时间戳。
echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
后面@
的数字是秒数
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT)或简称date -r 1278999698
此解决方案适用于不支持的date版本date -d @
。它不需要AWK或其他命令。Unix时间戳是自1970年1月1日以来的秒数,因此指定UTC很重要。
date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012
如果您使用的是Mac,请使用:
date -r 1357004952
获取纪元的命令:
date +%s
1357004952
感谢 Anton:BASH:将Unix时间戳转换为日期
正如@TomMcKenzie在对另一个答案的评论中所说的那样,date -r 123456789
可以说是自Unix Epoch以来以秒为单位的时间中更常见(即,实施更广泛)的简单解决方案,但是不幸的是,没有通用的可保证便携式解决方案。
-d
许多类型的系统上的选项意味着与GNU Date的--date
扩展完全不同。遗憾的是,GNU Date -r
与这些其他实现的解释不同。因此,不幸的是,您必须知道使用的是哪个版本date
,而且许多较旧的Unix date
命令不支持这两个选项。
更糟糕的是,POSIX date
既不识别-d
也不识别,-r
并且根本不提供任何标准方式(我知道)来从命令行格式化Unix时间(因为POSIX Awk也缺乏strftime()
)。(您不能使用touch -t
,ls
因为前者不接受从Unix Epoch开始的秒数。)
请注意,尽管Brian Kernighan直接提供的One True Awk确实具有strftime()
内置函数以及systime()
返回自Unix Epoch以来以秒为单位的当前时间的函数),所以Awk解决方案也许是最可移植的。