有没有一种简单的方法可以在Unix命令行中快速将Unix时间戳转换为日期?
date
命令可能可行,但是指定每个元素(月、日、年、小时等)非常笨拙,而且我无法弄清楚如何使它正常工作。看起来可能有更简单的方法,我错过了什么吗?
有没有一种简单的方法可以在Unix命令行中快速将Unix时间戳转换为日期?
date
命令可能可行,但是指定每个元素(月、日、年、小时等)非常笨拙,而且我无法弄清楚如何使它正常工作。看起来可能有更简单的方法,我错过了什么吗?
使用来自GNU coreutils的date
命令,你可以做到:
date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969
(来源: BASH: 将Unix时间戳转换为日期)
在OS X上,使用date -r
。
date -r "$TIMESTAMP"
或者使用 strftime()
。它不是直接从shell中使用的,但你可以通过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'
(格林威治标准时间),或者简单地使用date -r 1278999698
。 - Tom McKenzie这个解决方案适用于不支持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
如果您使用的是Mac,则请使用:
date -r 1357004952
获取时代的命令:
date +%s
1357004952
感谢Anton: BASH:将Unix时间戳转换为日期
UTC
标志比这个简单得多:::gnu-date -u -d'@1357004952'
;bsd-date -u -r 1357004952
::
2013年1月1日星期二01:49:12 UTC 2013年1月1日星期二01:49:12 UTC
- RARE Kpop Manifestodate -d @
,并且想要在本地时区显示输出的情况。 - dabest1date -r 123456789
是一个更常见(即更广泛实现)的简单解决方案,用于表示自Unix纪元以来的秒数,但不幸的是没有通用的保证可移植的解决方案。-d
选项意味着与GNU Date的--date
扩展完全不同的东西。 不幸的是,GNU Date不能像其他实现一样解释-r
。 因此,您必须知道您正在使用哪个版本的date
,而许多旧的Unix date
命令都不支持这两个选项。date
既不认识-d
也不认识-r
,并且在任何命令中都没有提供标准的方式(据我所知)从命令行格式化Unix时间(因为POSIX Awk也缺少strftime()
)。 (您不能使用touch -t
和ls
,因为前者不接受作为自Unix纪元以来的秒数给出的时间。)strftime()
函数以及一个systime()
函数,用于返回自Unix纪元以来的当前时间(秒),因此Awk解决方案可能是最便携的。$ 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
Tue Nov 18 01:53:03 GMTST 2014
。 - AJM-R
选项会有所帮助。它以RFC 2822格式输出日期,这样你就不需要所有的标识符了:date -d @1278999698 -R
。另一种可能是在本地以秒为单位输出日期:date -d @1278999698 +%c
。应该很容易记住。 :-)echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'
其他例子都很难记住。最简单的情况是:
date -r 1305712800
function unixts() { date -d "@$1"; }
使用示例:
$ unixts 1551276383
Wed Feb 27 14:06:23 GMT 2019
awk 'BEGIN { print strftime("%c", 1271603087); }'