chi*_*der 114 unix bash shell unix-timestamp
是否有一种快速的,单行的方式将Unix时间戳转换为Unix命令行中的日期?
date可能会工作,除了指定每个元素(月,日,年,小时等)相当尴尬,我无法弄清楚如何让它正常工作.似乎可能有一种更简单的方法 - 我错过了什么吗?
Joh*_*ica 156
使用GNU,date您可以:
date -d "@$TIMESTAMP"
Run Code Online (Sandbox Code Playgroud)
# date -d @0
Wed Dec 31 19:00:00 EST 1969
Run Code Online (Sandbox Code Playgroud)
(来自:BASH:将Unix时间戳转换为日期)
在OS X上,使用date -r.
date -r "$TIMESTAMP"
Run Code Online (Sandbox Code Playgroud)
或者,使用strftime().它不能直接从shell获得,但您可以通过gawk访问它.的%c说明符显示区域设置依赖性方式的时间戳.
echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
Run Code Online (Sandbox Code Playgroud)
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST
Run Code Online (Sandbox Code Playgroud)
qbi*_*qbi 59
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
后面@的数字是以秒为单位的数字
dab*_*st1 21
此解决方案适用于不支持的日期版本date -d @.它不需要AWK或其他命令.Unix时间戳是自1970年1月1日UTC以来的秒数,因此指定UTC非常重要.
date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Mac,请使用:
date -r 1357004952
Run Code Online (Sandbox Code Playgroud)
获取纪元的命令:
date +%s
1357004952
Run Code Online (Sandbox Code Playgroud)
归功于 Anton:BASH:将Unix时间戳转换为日期
正如@TomMcKenzie在对另一个答案的评论中所言,date -r 123456789可以说是一个更常见的(即更广泛实现的)简单解决方案,自Unix时代以来以秒为单位,但不幸的是,没有普遍保证的便携式解决方案.
-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解决方案可能是最便携的.
小智 5
对上面 dabest1 的答案稍作修正。将时区指定为 UTC,而不是 GMT:
$ date -d '1970-01-01 1416275583 sec GMT'
Tue Nov 18 00:53:03 GMT 2014
$ date -d '1970-01-01 1416275583 sec UTC'
Tue Nov 18 01:53:03 GMT 2014
Run Code Online (Sandbox Code Playgroud)
第二个是正确的。我认为原因是英国从1968年到1971年一直实行夏令时。