将时间转换为unix时间戳

时间:2014-06-03 15:37:30

标签: linux bash shell time

我有以下时间格式

"2014-06-02T16:23:13+02:00"

我想将其转换为unix时间戳(自1970年1月1日起)。对于上面的示例,该命令应返回:

1401725705

是否有Linux命令?

3 个答案:

答案 0 :(得分:4)

date -d"2014-06-02T16:23:13+02:00" +%s 
如果你有一个更新的GNU coreutil,

应该可以工作。我最近用v8.22进行了测试。

如果您使用的是像8.4这样的老式coreutil盒子。它不起作用,您可以尝试用空格替换T。在"2014-06-02 16:23:13+02:00"

中使用字符串date -d"2014-06-02 16:23:13+02:00" +%s

这是使用Red Hat Enterprise Linux Server release 6.5 (Santiago)

coreutil 8.4上进行测试的
$>date -d"2014-06-02 16:23:13+02:00" +%s                                    
1401718993

答案 1 :(得分:2)

date -d"2014-06-02T16:23:13+02:00" +%s

答案 2 :(得分:0)

正如pacholik所指出的那样,%s是自1970-01-01 00:00:00 UTC以来将日期转换为秒的方式。

您可以尝试其中任何一种(请注意-d--date=的使用情况,以及引号内外的%s +

$ date --date="2014-06-02T16:23:13+02:00" "+%s"
1401718993

$ date --date="2014-06-02T16:23:13+02:00" +"%s"
1401718993

$ date -d"2014-06-02T16:23:13+02:00" +"%s"
1401718993

作为旁注,您可以使用-d@TIME

执行相反的操作
$ date -d@1401718993
Mon Jun  2 14:23:13 UTC 2014

我发现您在使用T - time designator

时遇到了问题
$ date -d"$(sed 's/\(.*\)T\(.*\).*/\1 \2/' <<< "2014-06-02T16:23:13+02:00")" +"%s"
1401718993

sed获取字符串并删除中间的T

$ sed 's/\(.*\)T\(.*\).*/\1 \2/' <<< "2014-06-02T16:23:13+02:00"
2014-06-02 16:23:13+02:00