【问题标题】:How can I validate a "yyyy-MM-dd'T'HH:mm:ssZ" date/timestamp in UTC with Perl?如何使用 Perl 验证 UTC 中的“yyyy-MM-dd'T'HH:mm:ssZ”日期/时间戳?
【发布时间】:2010-01-18 19:28:24
【问题描述】:

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

CPAN?正则表达式?

我已经看到了两种方式

"yyyy-MM-dd'T'HH:mm:ssZ";

"yyyy-MM-ddTHH:mm:ssZ";

【问题讨论】:

  • 您可能还想查看“如何在 Perl 中验证日期?” stackoverflow.com/questions/297398/…
  • “yyyy”是否符合 Y10K 标准? :D 说真的,我只会在第一部分使用\d{4,}-

标签: perl validation datetime


【解决方案1】:

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 格式化程序已经完成的功能。

【讨论】:

  • DateTime 必须是有史以来用任何语言编写的最有用和设计良好的模块之一,恕我直言。
【解决方案2】:

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

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

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

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

【讨论】:

  • 如果我提供日期时间,我可以使用它来将其转换为 UTC 吗?
  • @Phil:你的意思是一旦你构造了 DateTime 对象,你可以在时区之间转换吗?绝对:请参阅 DateTime 文档:search.cpan.org/perldoc/DateTime; strftime() 方法将以您指定的任何格式返回一个字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多