2014-02-06 38 views
-1

我已經經歷了很多答案,並沒有一個似乎解決了我的問題。我想從紐約運行一個Perl腳本來安排某個時區的計算機上的任務,比如洛杉磯(或任何其他時區)。運行腳本的用戶可以選擇輸入日期/時間和時區。如何在Perl中的不同時區安排未來任務?

例子:

perl script.pl -action reboot LAHost.com 2014/012/12 15:00:00 'America/Los_Angeles' 

該腳本應該在洛杉磯當地時間下午3點安排LAHost.com計算機上重新啓動。

任何人都可以幫助我找到一種方法來使用DateTime或任何其他內置函數在perl中執行此操作嗎?

我是編程和當前學習Perl的新手。所以請原諒我的無知。

回答

0

你的問題似乎是

如何轉換日期和時間在指定的時間段爲本地時間?

use DateTime::Format::Strptime qw(); 

my $date = '2014/012/12'; 
my $time = '15:00:00'; 
my $tz = 'America/Los_Angeles'; 

my $format = DateTime::Format::Strptime->new(
    pattern => '%Y/%m/%d %H:%M:%S', 
    time_zone => $tz, 
    on_error => 'croak', 
); 

my $dt = $format->parse_datetime("$date $time"); 
$dt->set_time_zone('local'); 

print $format->format_datetime($dt), "\n"; 
+0

正是我一直在尋找的;但由於我沒有時間等待答案,我想出了一種似乎適用於我的方式,但我不確定這是否是最佳方式: my $ timeZone =「Europe/London 「; my $ dateTime = DateTime-> new(year => $ year,month => $ month, day => $ day,hour => $ hour,minute => $ minute, second => $ second,time_zone = > $ timeZone); 我在倫敦時間安排了一個採用「歐洲/倫敦」時區設置的行動,密切關注倫敦時鐘,並在倫敦的正確時間執行了行動。 謝謝你給我展示一種不同的方法。 –

+0

@Kaji喇嘛,你刪除的答案等同於我的,除非你不必推出你自己的解析器,如果你使用D :: F :: Strptime。 – ikegami

0
my $timeZone="Europe/London"; 
my $dateTime = DateTime->new(year => $year, month => $month, 
       day => $day, hour => $hour, minute => $minute, 
       second => $second, time_zone => $timeZone);