在Perl中解析日期字符串

问题描述:

我想通过试图用Date :: Manip解析它来检查变量$test是否包含有效的日期格式。当格式为“YYYY/MM/DD”时,它按预期工作。如果我将格式更改为“DD/MM/YYYY”(my $ test =“20/4/2012”),则表示无法正常工作。我尝试了设置为英国日期格式的配置功能,但仍然无法使用。在Perl中解析日期字符串

use Date::Manip qw(ParseDate); 
my $test="20_4_2012"; 
#my $test="2012_4_20"; 

$test =~ s/_/\//g; 

print $test; 

$date=ParseDate($test); 

if(!$date) { 
    print "baddate : $date\n"; 
} 

else { 
    print "Guddate: $date\n"; 
} 

您可以使用Time::ParseDate它允许你指定它的参数UK解析器功能做到这一点。

use Time::ParseDate; 

my $test="20/4/2012"; 

$time = parsedate($test, UK => 1); 
+0

我想使用manip :: parsedate。非常感谢信息 – Arav 2012-07-30 05:33:02

你的配置函数调用是什么样子的?我可以通过添加这个脚本来工作:

Date_Init("DateFormat=non-US"); 

ParseDate之前。

+0

非常感谢您的信息。试过Date_Init(“DateFormat =非美国”);它不起作用 – Arav 2012-07-30 05:32:30

+0

让我们把它分解到最低限度。 'perl -MDate :: Manip = ParseDate,Date_Init -e'Date_Init(“DateFormat = non-US”);打印ParseDate(“20/4/2012”);' - - 不起作用? – 2012-07-30 05:43:34

希望(以及在use添加Date_Init到导入列表),你已经找到你的解决方案:-)

但对那些通过寻找一些日期解析工具对Perl的利益,我可以强烈推荐核心模块Time::Piece - 它非常善于研究你的旧日期字符串的含义。

对于您的具体问题,真正的答案是“它取决于您有效的含义”当然。