如何在Perl中将ISO8601时间戳转换为unix时间?

如何在Perl中将ISO8601时间戳转换为unix时间?,perl,datetime,unix-timestamp,iso8601,Perl,Datetime,Unix Timestamp,Iso8601,给定一个以ISO8601格式表示日期/时间的字符串(例如,20100723T073000),我需要最终使用一个通用的strftime格式字符串将其解析为用户提供的格式。为此,我需要将ISO8601时间戳转换为Unix时间戳。Perl有大量的日期/时间操作模块,我有点不知所措。有什么建议吗?处理日期、时间、持续时间、时区和格式的champion模块是。一旦获得DateTime对象,就可以对其执行大量操作,比如添加/减去其他DateTime对象或对象,或者以其他格式打印出来 use strict;

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

处理日期、时间、持续时间、时区和格式的champion模块是。一旦获得DateTime对象,就可以对其执行大量操作,比如添加/减去其他DateTime对象或对象,或者以其他格式打印出来

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”

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

$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")'
1385845503
与任何日期处理一样,对时区问题要谨慎