Bash 将Unix时间戳转换为日期字符串
是否有一种快速、一行的方法可以从Unix命令行将Unix时间戳转换为日期Bash 将Unix时间戳转换为日期字符串,bash,shell,unix,unix-timestamp,Bash,Shell,Unix,Unix Timestamp,是否有一种快速、一行的方法可以从Unix命令行将Unix时间戳转换为日期 date可能会起作用,但要指定每个元素(月、日、年、小时等)相当麻烦,而且我也不知道如何让它正常工作。似乎有更简单的方法 — 我遗漏了什么吗?有了GNU的日期你可以: awk 'BEGIN { print strftime("%c", 1271603087); }' date -d "@$TIMESTAMP" (发件人:) 在OSX上,使用date-r date -r "$TIMESTAMP" 或者,使用strfti
date
可能会起作用,但要指定每个元素(月、日、年、小时等)相当麻烦,而且我也不知道如何让它正常工作。似乎有更简单的方法 — 我遗漏了什么吗?有了GNU的日期
你可以:
awk 'BEGIN { print strftime("%c", 1271603087); }'
date -d "@$TIMESTAMP"
(发件人:)
在OSX上,使用date-r
date -r "$TIMESTAMP"
或者,使用strftime()
。它不能直接从shell获得,但您可以通过访问它。%c
说明符以区域设置相关的方式显示时间戳
echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
date-d@1278999698+%Y-%m-%d%H:%m:%S'
如果
@
后面的数字是以秒为单位的数字如果您觉得这种表示法不合适,那么-R
-选项可能会有所帮助。它以RFC2822格式输出日期。因此,您不需要所有这些标识符:date-d@1278999698-R
。另一种可能是在您的区域设置中以秒为单位输出日期:date-d@1278999698+%c
。应易于记忆。:-) 标准的Perl解决方案是:
echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'
(或本地时间,如果首选)此解决方案适用于不支持
date-d@
的日期版本。它不需要任何命令或其他命令。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
安东:正如@TomMcKenzie在对另一个答案的评论中所说,
date-r 123456789
可以说是自Unix时代以来以秒为单位的更常见(即实现更广泛)的简单解决方案,但不幸的是,没有通用的可移植解决方案
许多类型的系统上的-d
选项意味着与GNU Date的-Date
扩展完全不同的内容。遗憾的是,GNU Date对-r
的解释与其他实现不同。因此,不幸的是,您必须知道您使用的是哪个版本的date
,而且许多旧的Unixdate
命令都不支持这两个选项
更糟糕的是,POSIXdate
既不能识别-d
也不能识别-r
,而且在任何命令(据我所知)中都没有提供从命令行格式化Unix时间的标准方法(因为POSIX Awk也缺少strftime()
)。(不能使用touch-t
和ls
,因为前者不接受自Unix纪元以来以秒为单位的时间。)
请注意,尽管Brian Kernighan直接提供的一个真正的Awk现在已经内置了
strftime()
函数以及systime()
函数来返回Unix时代以来的当前时间(以秒为单位),但Awk解决方案可能是最具可移植性的。对上面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
第二个是正确的。我认为原因是,在英国,夏时制从1968年到1971年一直有效。这里的其他例子很难记住。简单地说:
date -r 1305712800
将以下内容放入~/.bashrc中:
function unixts() { date -d "@$1"; }
用法示例:
$ unixts 1551276383
Wed Feb 27 14:06:23 GMT 2019
Python:
python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"
在OSX 10.8上,它是
date-r 1278999698+'%Y-%m-%d%H:%m:%s'
(GMT)或简单地date-r 1278999698
适用于Ubuntu 16.04可能的重复,请确保从时间戳中删除毫秒(即仅为10位,而不是13位),否则您将得到无效的结果(对于macOS的日期是如此).我以为这不起作用,直到我意识到我有一个毫秒的时间戳。切掉最后3位数字,你会得到准确的时间混合结果:在ubuntu Linux中不起作用,但在Mac OS X中起作用。
$ unixts 1551276383
Wed Feb 27 14:06:23 GMT 2019
python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"