我需要按照以下格式定義的創建TimeZone的POSIX格式。Java TimeZone和Linux TimeZone夏時制不匹配
std offset dst [offset],start[/time],end[/time]
對於離爲 「美國/紐約」 的POSIX格式是 EST + 5EDT,M3.2.0/2,M11.1.0/2
現在值M3.2.0/2在被表示形式Mm.wd/t。
這指定了第m個月的第w周的第d天。 d天必須介於0(週日)和6之間。周w必須介於1和5之間;第1周是第d天發生的第一週,第5周指定該月的最後一天。月份米應在1和12之間的I從下面的鏈接
http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
所以上面的示例狀態,借上述的說明正常的從UTC偏移爲5小時;因爲這是主要子午線以西,符號是正面的。夏季時間從3月的第二個星期日凌晨2:00開始,到11月的第一個星期日凌晨2:00結束。
當我在Linux下的時區文件檢查這在/ usr/share/zoneinfo中/美國/紐約,它上面的值相匹配
EST5EDT,M3.2.0,M11.1.0
然而,當我構建這個在Java爲時區 「美國/紐約」 我得到下面的字符串
EST-5EDT + 1,M2.1.1/2,M10.1.1/2
我通過提取從所述信息構成上面的字符串輸出下面的代碼。
TimeZone timezone = TimeZone.getTimeZone("America/New_York");
System.out.println(timezone.toString());
的輸出是如下
sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]
通知的值endMonth = 10,其應是11相比,Linux的輸出。
你能發佈一個指向這種格式的POSIX文檔的鏈接?我好奇。 –
是的,我在說明中提到它,如下 http://www.gnu.org/software/libc/manual/html_node/TZ-Variable。html –
謝謝,但不,這不是官方的POSIX文檔。這只是gnu.org上的一個圖書館。谷歌搜索引導我到其他來源記錄這種假設的POSIX日期時間格式的不同定義。所以我希望有人可以發佈權威來源。 –