将Unix时间戳转换为日期字符串


Answers:


180

使用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

3
确保从时间戳中消除了毫秒(即只有10位而不是13位),否则您将得到无效的结果(对于macOS的日期是正确的)。
emerino

我以为这是行不通的,直到我意识到我有一个以毫秒为单位的时间戳。砍掉最后3位数字,您会得到准确的时间
Stewart

64

date -d @1278999698 +'%Y-%m-%d %H:%M:%S' 后面@的数字是秒数


28
在OSX 10.8上,它是date -r 1278999698 +'%Y-%m-%d %H:%M:%S'(GMT)或简称date -r 1278999698
Tom McKenzie

适用于Ubuntu 16.04
Mike Q

24

此解决方案适用于不支持的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时间戳转换为日期


10

正如@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 -tls因为前者不接受从Unix Epoch开始的秒数。)

请注意,尽管Brian Kernighan直接提供的One True Awk确实具有strftime()内置函数以及systime()返回自Unix Epoch以来以秒为单位的当前时间的函数),所以Awk解决方案也许是最可移植的。


4

如果您觉得该符号很尴尬,则-R-option确实有帮助。它以RFC 2822格式输出日期。因此,您不需要所有这些标识符:date -d @1278999698 -R。另一种可能性是在您的语言环境中以秒为单位输出日期date -d @1278999698 +%c。应该很容易记住。:-)


2

对上面的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年一直有效。


2

标准的Perl解决方案是:

echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'

(或本地时间,如果需要)



1

这里的其他例子很难记住。最简单的说:

date -r 1305712800

混合结果:在ubuntu Linux中不起作用,但在Mac OS X中则起作用。
Mike Q

1

将以下内容放入〜/ .bashrc中:

function unixts() { date -d "@$1"; }

用法示例:

$ unixts 1551276383

Wed Feb 27 14:06:23 GMT 2019

-1

蟒蛇:

python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.