2012-07-30 165 views
2

我想通過試圖用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"; 
} 

回答

1

您可以使用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

1

你的配置函數調用是什麼樣子的?我可以通過添加這個腳本來工作:

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

1

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

但對那些通過尋找一些日期解析工具對Perl的利益,我可以強烈推薦核心模塊Time::Piece - 它非常善於研究你的舊日期字符串的含義。

對於您的具體問題,真正的答案是「它取決於您有效的含義」當然。