2013-05-21 55 views
1

在java中,我想知道什麼是保持顯示,查詢,報告等日期信息的最佳實踐。看起來,如果我們堅持了很長時間,所有時區依賴關係將被刪除,我們將保持'全局持久化,自動顯示本地'原則,因爲Date對象會自動將長時間轉換爲當前時區。如何保留日期信息?

但是,作爲Date對象持久化的優點是什麼?
除了信息所有者的時區之外,我是否還有其他信息?
DLS考慮時可以收到任何錯誤信息嗎?
堅持作爲UTC日期和長的區別只是可讀的數據庫信息?

+0

您不清楚您使用的語言/框架。是.Net,Java,Javascript? – Artemix

+0

我的問題不依賴於語言。但仍然,我編輯爲java –

+2

可能對你有趣:http://stackoverflow.com/questions/13303676/is-it-java-best-practice-to-store-dates-as-longs-in-your-數據庫 – Kai

回答

1

根據您的數據庫,您應該使用TIMESTAMP WITH TIMEZONE或者將其轉換爲UTC時間並將其存儲爲long

第一個依靠數據庫來正確處理它(數據庫會,但你的數據庫驅動程序?你必須測試你的設置)。第二個使它成爲一個手動過程,最終你會得到正確的結果,但會更多地使用它,因爲你必須關心一切。

Java裏面,你可能想使用CalendarDate,因爲那裏你可以指定TIMEZONE等手工,因此你可以在不同的你自己更容易的時區顯示日期。

+0

已經不是UTC值了嗎?在轉換爲long之前是否需要將其轉換爲utc? –

+0

通常長時間值是時區不可知的:如果你從當地時間得到它,它包含從本地1/1/1970毫秒數,如果你從UTC時間得到它,它從UTC 1/1/1970開始。 – Artemix

+0

@MustafaGenç是,不,這取決於你如何將它插入到'日期'中。 「Date」類只使用「本地」(例如ON SERVER)時區。但這也意味着它將使用夏令時偏移。 (例如10月最後一個星期一在德國沒有02.30,因爲時間從02.00跳到03.00)所以,如果你想使用'Date',一定要把你的本地時區設置爲UTC。 –