我如何验证一个";yyyy-MM-dd';T';HH:mm:ssZ“;日期/时间戳(以UTC为单位,使用Perl)?

我如何验证一个";yyyy-MM-dd';T';HH:mm:ssZ“;日期/时间戳(以UTC为单位,使用Perl)?,perl,validation,datetime,Perl,Validation,Datetime,代码可能很好,但方向正确的一点也很好 CPAN?正则表达式 我看到了两个方面 “yyyy-MM-dd'HH:MM:ssZ” “yyyy-MM-ddTHH:MM:ssZ” 根据您正在执行的操作,您可能希望将字符串强制转换为对象,例如: use DateTime::Format::MySQL; my $dt = DateTime::Format::MySQL->parse_datetime( '2003-01-16 23:12:01' ); 然后,您可以轻松地以不同的格式输出时间字符串,使用

代码可能很好,但方向正确的一点也很好

CPAN?正则表达式

我看到了两个方面

“yyyy-MM-dd'HH:MM:ssZ”


“yyyy-MM-ddTHH:MM:ssZ”

根据您正在执行的操作,您可能希望将字符串强制转换为对象,例如:

use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime( '2003-01-16 23:12:01' );
然后,您可以轻松地以不同的格式输出时间字符串,使用它执行计算,等等


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

对于DateTime,Ether无疑是正确的。使用DateTime,您可以确保您有一个实际存在的时间,如果您自己写支票,2000年2月29日的某个时间可能会过去

您的格式看起来像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;

您可以使用其他格式模块,例如,但最终将重新创建ISO8601 formatter已经完成的功能。

DateTime必须是用任何语言编写的最有用、设计最完善的模块之一,IMHO。您可能还想看看“如何在Perl中验证日期?”是否符合“yyyy”Y10KD说真的,我会在第一部分使用
\D{4,}-
。如果我提供日期时间,我可以用它转换为UTC吗?@Phil:你的意思是一旦你构造了datetime对象,你能在时区之间转换吗?绝对:参见日期时间文档:;strftime()方法将以您指定的任何格式返回字符串。