2015-08-15 101 views

回答

2

我使用的日期時間。

$ perl -MDateTime -E'say DateTime->now(time_zone => $ARGV[0])' America/Toronto 
2015-08-15T18:39:54 

$ perl -MDateTime -E'say DateTime->now(time_zone => $ARGV[0])' America/Halifax 
2015-08-15T19:39:55 
0

Localtime()函數使用您的本地系統時區。您可以在使用TZ環境變量執行程序之前指定時區。

這裏是名爲time.pl與不TZ執行它的

#!/usr/bin/perl -w 

my $time = localtime; 
print $time; 

輸出perl腳本是繼..

./time.pl 
Sun Aug 16 00:12:33 2015 

TZ=GST ./time.pl 
Sat Aug 15 18:42:36 2015 
+0

看來這是隻適用於類UNIX平臺。 – Thomson

+0

確實..但我想在其他操作系統中也必須有一個env變量來更改時區。 –

+0

'TZ'確實也影響Windows上的本地時間。只是不確定要傳遞給它的值。請注意,在更改'$ ENV {TZ}'後應該調用'POSIX :: tzset()'。 – ikegami

1

Time::Piece將尊重TZ環境變量。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use Time::Piece; 

say scalar localtime->strftime('%F %T %Z'); 

foreach ('UTC', 'Europe/Paris', 'America/New_York') { 
    $ENV{TZ} = $_; 
    say scalar localtime->strftime('%F %T %Z'); 
} 

輸出(當在倫敦運行):

2015-08-17 09:46:53 BST 
2015-08-17 08:46:53 UTC 
2015-08-17 10:46:53 CEST 
2015-08-17 04:46:53 EDT 
+0

這是OP已經拒絕的答案的更長版本。 Windows肯定不知道「歐洲/巴黎」。 – ikegami

+0

另外,你應該在改變'$ ENV {TZ}'後調用'POSIX :: tzset()'。 – ikegami

相關問題