Perl检查字符串是否包含mysql时间戳

时间:2015-11-05 23:25:44

标签: perl

我有一个变量$ data,可能包含也可能不包含mysql时间戳。我想检查它是否实际包含时间戳。

$data = '2015-11-21 13:45:20';

我可以使用像

这样的大型正则表来检查它
/2[0-9][0-9][0-9]-(0[1-9]|1[0-2])-(0[1-9]|2[0-9]|3[0-1]) ([01][0-9]|2[0-4]):[0-5][0-9]:[0-5][0-9]/

但有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Perl模块DateTime :: Format :: MySQL。如果输入格式不可接受,则其parse_datetime方法将抛出异常,如果可以将其解析为MySQL日期时间,则返回DateTime对象。它看起来非常严格,可能就是你想要的。

use strict;
use warnings;
use DateTime::Format::MySQL;

while(<DATA>){
    chomp;
    print "$_: ";
    my $result = validate_date($_);
    print defined $result
        ? "Recognized format. ($result)\n"
        : "Unrecognized format.\n";
}

sub validate_date {
    return eval {DateTime::Format::MySQL->parse_datetime(shift)};
}

__DATA__
2015-11-21 13:45:20
2015-11-21 13 : 45 : 20

使用DateTime对象,特别是使用DateTime :: Format :: MySQL模块,它很容易转向并输出MySQL-ready datetime字符串。

另一方面,如果目标是接受输入,验证它,然后将其发送到MySQL,您可以考虑使用DateTime :: Format :: DateParse中的parse_datetime方法接受宽各种日期字符串尽可能实用。该模块返回DateTime对象。然后,您可以使用DateTime :: Format :: MySQL方法format_datetime将该DT对象转换为有用的MySQL格式。这样你就可以接受自由,但是你输出的内容是严格的,这通常是一种合理的设计模式。