2011-12-12 56 views
2

我正在使用以下代碼來打印當前時間。如何從本地時間提取時區()

use Getopt::Long; 
use Time::Local; 
sub gettime 
{ 
     my $t = time(); 
     my ($sec,$mn,$hr,$mday,$mon,$yr,@left, $dstr); 

     ($sec,$mn,$hr,$mday,$mon,$yr,@left) = localtime($t); 
     $yr = $yr-100+2000; 
     $mon += 1; 
     $dstr = sprintf "%02d:%02d:%02d (%02d-%02d-%04d)", $hr, $mn, $sec, $mon, 
$mday, $yr; 
     print $dstr; 
} 

gettime(); 

我可以設置使用的時區 - 本地$ ENV {TZ} = 「:在/ usr /共享/ lib中/ zoneinfo區/美國/洛杉磯」;

如何從localtime()提取時區?

+1

$ yr = $ yr-100 + 2000確實(記錄)年份+ 1900,儘管我確定您的表格已經過優化。 – JRFerguson

回答

5

你可以使用strftime()

use POSIX; 
$tz = strftime("%Z", localtime()); 

或者,計算localtime()gmtime()之間的差異。

1

您可以讓時區以及從UTC偏移:

perl -MPOSIX -e 'print strftime "%Z (%z)\n",localtime' 
0
$ perl -MPOSIX -le 'tzset; print for tzname' 
CST 
CDT 

tzset()tzname()來自POSIX模塊的功能可以是一個容易記住的答案。