6

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

4

2 回答 2

12

处理日期、时间、持续时间、时区和格式的冠军模块是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”

于 2010-06-24T20:51:05.437 回答
4

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

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

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

于 2013-11-30T21:09:37.657 回答