2013-05-14 43 views
1

我試圖在Linux機器上的代碼,strftime的 '%Z'(本地時間)不按預期工作在solaris機器

my $sysdate = strftime "%Y%m%d%T", (localtime);  
my $daylight_saving_time = strftime '%z', (localtime); 

我得到下面的輸出,

sysdate = 2013051402:12:02  
daylight_saving_time = -0400 

我試過同在太陽能機器上,我得到了這個

sysdate = 2013051402:12:02 
daylight_saving_time = %z 

任何人都知道要做的變化來獲得夏季機器的夏令時。

在此先感謝。

+1

http://www.nntp.perl.org/group/perl.beginners/2003/01/msg39201.html – perreal 2013-05-14 07:18:27

+0

謝謝你,這幫了我。 :) – user2380503 2013-05-15 12:26:04

回答

1

問題是POSIX::strftime只是調用你係統的strftime(3),所以 你不管它是什麼 - 或 - 不是。 %z不是POSIX.1標準 的一部分,在系統中不一致。在其他較早版本的操作系統上,如HPUX,%z,與%Z(時區名稱)相同爲 。這僅適用於舊版本。

在Solaris 8上,9 strftime不支持%z - 使用Solaris 10。

這適用於更多的現代人版本的Solaris 10 &的Solaris 11:

%Z被替換從UTC在ISO 8601偏移:2000標準格式 (+ HHMM或-hhmm),或通過任何字符,如果沒有時間區域是可確定的。例如,「-0430」表示距離UTC (格林威治西部)4小時30分鐘。如果tm_isdst爲零,則使用標準時間off- 集。如果tm_isdst大於零,則使用日光時間偏移。如果tm_isdst爲負數,則不返回字符 。

因此,這是一個C庫函數問題,perl位於這些庫之上。我沒有解決方法。