【发布时间】:2014-06-03 15:37:29
【问题描述】:
我有以下时间格式
"2014-06-02T16:23:13+02:00"
我想将其转换为 unix 时间戳(自 1970 年 1 月 1 日起)。对于上面的例子,命令应该返回:
1401725705
有没有 linux 命令可以做到这一点?
【问题讨论】:
我有以下时间格式
"2014-06-02T16:23:13+02:00"
我想将其转换为 unix 时间戳(自 1970 年 1 月 1 日起)。对于上面的例子,命令应该返回:
1401725705
有没有 linux 命令可以做到这一点?
【问题讨论】:
date -d"2014-06-02T16:23:13+02:00" +%s
如果您有更新的 GNU coreutil,应该可以使用。我用最新的 v8.22 测试过。
如果您使用的是 8.4 等旧版 coreutil 设备。它不起作用,您可以尝试将T 替换为空格。在date -d"2014-06-02 16:23:13+02:00" +%s中使用字符串"2014-06-02 16:23:13+02:00"
这是在 Red Hat Enterprise Linux Server release 6.5 (Santiago) 和 coreutil 8.4 上测试的
$>date -d"2014-06-02 16:23:13+02:00" +%s
1401718993
【讨论】:
date -d"2014-06-02T16:23:13+02:00" +%s
【讨论】:
date: invalid date '2014-06-02T16:23:13+02:00'
date --version 告诉你什么?
date (GNU coreutils) 8.5 Copyright (C) 2010 Free Software Foundation, Inc. 第二个来自 BusyBox:BusyBox v1.19.4
正如 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
【讨论】: