我有一個日期作爲java.sql.Timestamp存儲在數據庫中。日期爲「2010-01-20T19:10:35.000Z」,相當於1264014635743毫秒。什麼可能導致此SimpleDateFormat格式錯誤?
不知何故,與開發機器相比,prod機器上的日期格式不同。
的代碼格式的日期是:
private final static String DATE_FORMAT = "yyyy-MM-dd";
public final static SimpleDateFormat APP_DATE_FORMATER = new SimpleDateFormat(DATE_FORMAT);
private static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("Etc/UTC");
APP_DATE_FORMATER.setTimeZone(UTC_TIMEZONE);
DateTimeZone.setDefault(DateTimeZone.UTC);
String output = APP_DATE_FORMATER.format(date)
在dev的所生成的輸出是正確的 「2010-01-20」。但是在一天之後,我有「2010-01-21」!
當然,既然督促服務器上發生的錯誤,我在我的調試選項有限...
我有雙重檢查,並且兩個服務器具有相同的時間和時區。兩個時鐘都與ntp服務器同步。
[更新]正式版數據庫的數值:「20年10月1日19:10:35,743000000」爲日期字段
感謝您的線程建議。但我懷疑問題的原因是線程,因爲每次刷新頁面時,都會重新計算日期並顯示爲2010-01-21 ... – 2010-01-21 18:53:46
在這種情況下,您正在查看時區問題。你能否讓系統管理員運行一個簡單的格式化並打印特定時間戳值的SSCEP? – kdgregory 2010-01-21 18:59:24
我有權訪問prod服務器,但我不知道「SSCEP」是什麼(它是Windows Server 2008機器)。我通過雙擊任務欄中的日期/時間來檢查兩臺機器上的時區設置,它們是相同的。 感謝通過ThreadLocal代碼的方式! – 2010-01-21 19:32:01