2010-06-24 463 views
7

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

回答

13

处理日期,时间,持续时间,时区和格式的冠军模块是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七时三十分00秒”

4

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

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

与任何日期处理一样,谨慎处理时区问题。

相关问题