2015-12-16 54 views
0

我使用這種格式在Joda-Time喬達時間時區不同,導致主線代碼VS測試

MM/dd/yyyy HH:mm:ss zzzz 

在運行我的應用程序將打印2015年12月16日9點52分37秒中部標準時間,但在我的測試中,它打印12/16/2015 09:52:37 -07:00。

我發現ZZZZ文檔的模式說:

朗特定非定位格式(例如,「太平洋標準時間」)如果 本地化數據不可用,本地化GMT格式用於 (例如GMT-08:00)。

本地化是指語言環境嗎?我想讓測試輸出與主線代碼輸出一致的日期。

+0

檢查您的生產和測試機器的語言環境和時區設置(例如,這些將是'locale'命令和[在某些發行版上檢查'/ etc/timezone'](http://stackoverflow.com/q/3118582/466738),'date'命令也會顯示不同在時區值中)。發佈更多關於您的環境的信息,那麼它可能會帶來更好的答案。 –

+0

不知道這是否有幫助,但有問題的實際代碼行是'new DateTime()。toString(DateTimeFormat.forPattern(「MM/dd/yyyy HH:mm:ss zzzz」)'我玩過添加一個語言環境DateTimeFormatter,但得到相同的結果 – Barry

+0

如果你想把它作爲答案我可以接受它我認爲這是一個機器設置,我最終重構代碼有點和事情開始工作 – Barry

回答

2

這很可能是操作系統級別的服務器環境的差異。如果沒有明確指定時間戳,JodaTime和JDK將使用時間戳的「默認時區」。默認時區是OS提供的時區。檢查生產和測試機器上的區域設置和時區設置(例如,這些將是locale命令和checking /etc/timezone on some distributions,並且date命令也可以顯示時區值的差異)。

或者,您可以使用從JDK的TimeZone.getDefault()初始化的DateTimeZone.getDefault()查詢JodaTime使用的默認時區。這又會在JVM啓動屬性user.timezone(當沒有明確設置時,它向操作系統查詢時區)進行初始化。如果你想迫使JVM在一個比由OS報道的其他某個時間區域中運行,可以在啓動時提供的屬性:

java -Duser.timezone=UTC