2010-01-20 75 views
3

轉換日期時間格式yyyy-mm-dd hh:mm:ss(可能是一個字符串)到UTC, 調查DateTime,但我看不到如何解析字符串?如何在Perl中將yyyy-mm-dd hh:mm:ss轉換爲UTC格式?

更新:

這工作正常嗎?

require 5.002; 

use strict; 
use warnings; 

use DateTime::Format::DateManip; 

my $string = '2010-02-28 00:00:00'; 

my @dates = (
    $string 
); 

for my $date (@dates) { 
    my $dt = DateTime::Format::DateManip->parse_datetime($date); 
    die "Cannot parse date $date, Please use a valid date in this format 'yyyy-mm-dd mm:hh:ss'" unless defined $dt; 
    print $dt."\n"; 
    $dt->set_time_zone('UTC'); 
    print $dt."Z\n"; # Is this correct??? 
} 

回答

2

看看這個SO問題,How can I validate dates in Perl?爲一個答案。

還有一些不錯的DateTime幫手模塊CPAN。例如。 DateTimeX::Easy它允許你創建DateTime對象,像這樣:

use DateTimeX::Easy; 

my $a_date = DateTimeX::Easy->new('11/17/2008 12:01am'); 

my $tomorrow = DateTimeX::Easy->new('tomorrow'); 

my $last_week = DateTimeX::Easy->new('last week'); 

/I3az/

+0

謝謝你的提示,看我的編輯 – 2010-01-20 20:43:17

+0

這使我對我的解決方案,請參閱更新。再次感謝 – 2010-01-20 20:55:47

+0

沒有probs。但是我不確定你的「這是正確的嗎?」編輯指的是?如果在解析的日期/時間字符串中沒有提供時區,則假定您的本地TZ。 $ dt-> set_time_zone()然後允許您從不同的時區角度查看您擁有的DateTime對象。希望是有道理的! – draegtun 2010-01-21 15:40:32

2

您需要DateTime :: Format :: *模塊中的某個解析方法。

您的字符串並不完全像ISO8601格式(這是 'YYYY-MM-DDTHH:MM:SS'),但它匹配MySQL的格式樣式:

use DateTime::Format::MySQL; 
my $dt = DateTime::Format::MySQL->parse_datetime('2010-02-28 00:00:00'); 

print $dt->strftime("%Y %M %d %T"); 

生產:

2010 00 28 00:00:00

+0

非常不爽的答案。 – daxim 2010-01-21 19:05:16

+0

@daxim:我回答的問題非常模糊(如果您查看編輯歷史記錄,它只有一行)。 – Ether 2010-01-21 19:10:56

+0

@daxim:請再次檢查,添加了工作代碼和參考。今天對我來說是糟糕的一天,我想解決這個問題! :) – Ether 2010-01-21 19:42:00

相關問題