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時區混亂?
謝謝。
應用程序時區可以使用TimeZone#setDefault進行更改。在打印任何值之前,始終將TimeZone明確設置爲每個SimpleDateFormat是一種很好的做法。 – bsiamionau