【问题标题】:How can I convert an ISO8601 timestamp into unix time in Perl?如何在 Perl 中将 ISO8601 时间戳转换为 unix 时间?
【发布时间】:2010-06-24 20:05:48
【问题描述】:

给定一个表示 ISO8601 格式的日期/时间的字符串(例如20100723T073000),我最终需要使用通用的strftime 格式字符串将其解析为用户提供的格式。为此,我需要将 ISO8601 时间戳转换为 Unix 时间戳。 Perl 有大量的日期/时间操作模块,我有点不知所措。有关如何执行此操作的任何建议?

【问题讨论】:

    标签: perl datetime unix-timestamp iso8601


    【解决方案1】:

    处理日期、时间、持续时间、时区和格式的冠军模块是DateTime。获得 DateTime 对象后,您可以对其执行大量操作,例如添加/减去其他 DateTime 对象或DateTime::Duration 对象,或以其他格式打印出来。

    use strict; use warnings;
    use DateTime;
    use DateTime::Format::ISO8601;
    
    my $dt = DateTime::Format::ISO8601->parse_datetime('20100723T073000');
    
    print $dt->strftime('%F %T');
    

    打印:“2010-07-23 07:30:00”

    【讨论】:

      【解决方案2】:

      如果您没有或不想安装DateTime::Format::ISO8601 模块,您可以使用HTTP::Date 解析至少一个ISO8601 子集:

      $ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")'
      1385845503
      

      与任何日期处理一样,请注意时区问题。

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 2015-01-20
        • 1970-01-01
        • 2017-03-30
        • 2021-05-13
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多