【问题标题】:Converting time to unix timestamp将时间转换为 unix 时间戳
【发布时间】:2014-06-03 15:37:29
【问题描述】:

我有以下时间格式

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

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

1401725705

有没有 linux 命令可以做到这一点?

【问题讨论】:

    标签: linux bash shell time


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:
      date -d"2014-06-02T16:23:13+02:00" +%s
      

      【讨论】:

      • 它返回date: invalid date '2014-06-02T16:23:13+02:00'
      • @MOHAMED,date --version 告诉你什么?
      • 我尝试了 2 个 linux 第一个:date (GNU coreutils) 8.5 Copyright (C) 2010 Free Software Foundation, Inc. 第二个来自 BusyBox:BusyBox v1.19.4
      【解决方案3】:

      正如 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
      

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2013-04-07
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 2015-02-09
        • 1970-01-01
        相关资源
        最近更新 更多