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

时间:2010-07-14 19:41:06

标签: bash shell unix unix-timestamp

是否有一种快速,单行的方式将Unix时间戳转换为Unix命令行中的日期?

date可能有效,除非指定每个元素(月,日,年,小时等)相当尴尬,我无法弄清楚如何让它正常工作。似乎可能有一种更简单的方法 - 我错过了什么吗?

11 个答案:

答案 0 :(得分:147)

使用GNU的date,您可以:

date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969

(来自:BASH: Convert Unix Timestamp to a Date

在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

答案 1 :(得分:57)

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

答案 2 :(得分: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

如果您使用的是Mac,请使用:

date -r 1357004952

获取纪元的命令:

date +%s
1357004952

归功于Anton: BASH: Convert Unix Timestamp to a Date

答案 3 :(得分:9)

正如@TomMcKenzie在对另一个答案的评论中所说,date -r 123456789可以说是一个更常见的(即更广泛实现的)简单解决方案,自Unix时代以来以秒为单位,但不幸的是,没有普遍保证的便携式解决方案

许多类型的系统上的-d选项意味着与GNU Date的--date扩展完全不同。遗憾的是,GNU Date并不像其他实现那样解释-r。所以很遗憾你必须知道你正在使用哪个版本的date,而许多旧的date命令都不支持任何一个选项。

更糟糕的是,POSIX date既不识别-d也不识别-r,并且根本不提供任何命令(我知道)从命令行格式化Unix时间(因为POSIX Awk也缺少strftime())。 (你不能使用touch -tls,因为前者不接受自Unix Epoch以来的秒数。)

注意虽然直接来自Brian Kernighan的One True Awk现在具有内置的strftime()函数以及systime()函数来返回自Unix Epoch以来的当前时间,所以Awk解决方案也许是最便携的。

答案 4 :(得分:4)

如果您发现符号笨拙,可能-R - 选项确实有帮助。它以RFC 2822格式提供日期。因此,您不需要所有这些标识符:date -d @1278999698 -R。另一种可能性是在您的语言环境中输出日期:date -d @1278999698 +%c。应该很容易记住。 : - )

答案 5 :(得分:2)

标准的Perl解决方案是:

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

(或当地时间,如果愿意的话)

答案 6 :(得分: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年,夏令时不断发生。

答案 7 :(得分:2)

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

date -r 1305712800

答案 8 :(得分:1)

awk 'BEGIN { print strftime("%c", 1271603087); }'

答案 9 :(得分:0)

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

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

用法示例:

$ unixts 1551276383

Wed Feb 27 14:06:23 GMT 2019

答案 10 :(得分:-1)

Python:

python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"