2016-12-29 70 views
0

我們在我的應用程序的功能中使用SimpleDateFormat userDateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00")尚未設置時區Java SimpleDateFormat更改爲不同的TimeZone

而且創造了每一次userDateFormat,我用

System.out.println("userDateFormat timezone: " + ((SimpleDateFormat)userDateFormat).getTimeZone().toString()); 

得到userDateFormat的時區信息。

在與函數的不同調用(服務器不關機)運行的應用程序,我們可以得到不同的時區信息:

userDateFormat timezone: sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 

userDateFormat timezone: sun.util.calendar.ZoneInfo[id="Europe/Copenhagen",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=133,lastRule=java.util.SimpleTimeZone[id=Europe/Copenhagen,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] 

我不知道爲什麼時區是在這臺服務器在這裏改變。

我們還有另一個SimpleDateFormat對象,其setTimeZone爲'GMT'(只在所有項目中設置一次),但從結果看來,它似乎使用時區'CET(UTC + 1)'。是否有任何服務器設置會導致jdk時區混亂?

謝謝。

+1

應用程序時區可以使用TimeZone#setDefault進行更改。在打印任何值之前,始終將TimeZone明確設置爲每個SimpleDateFormat是一種很好的做法。 – bsiamionau

回答

0

正如bsiamionau所說,我們有調用TimeZone.setDefault的代碼,它改變了默認的時區。