如何用Perl验证UTC中的“yyyy-MM-dd'T'HH:mm:ssZ”日期/时间戳?

时间:2010-01-18 19:28:25

标签: perl validation datetime

代码很不错,但正确的方向也很好。

CPAN?正则表达式?

我见过两种方式

“YYYY-MM-dd'T'HH:MM:SSZ”;

“YYYY-MM-DDTHH:MM:SSZ”;

2 个答案:

答案 0 :(得分:11)

Ether使用DateTime肯定在正确的轨道上。使用DateTime,您可以确定您有一个实际存在的时间,如果您自己编写支票,2000年2月29日的某些内容可能会消失。

您的格式看起来像ISO8601字符串。因此,使用DateTime::Format::ISO8601进行解析。

use DateTime;
use DateTime::Format::ISO8601;

my $string = '2010-02-28T15:21:33Z';

my $dt = DateTime::Format::ISO8601->parse_datetime( $string );
die "Impossible time" unless $dt;

您可以使用其他格式模块,例如D::F::Strptime,但您最终会重新创建ISO8601格式化程序已经完成的工作。

答案 1 :(得分:4)

根据您正在做的事情,您可能希望将您的字符串强制转换为DateTime对象,例如:

use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime( '2003-01-16 23:12:01' );

然后,您可以轻松地以不同的格式输出时间字符串,使用它执行计算等。

您没有指定以该特定格式生成字符串的内容,但是有大量输入源的DateTime :: Format :: modules。