我有這個問題很長一段時間。問題在於:我所使用的大多數SQL服務器(即MySQL)都不會將時區信息與日期一起存儲,所以我假設他們只是將日期存儲爲相對於服務器的本地時區。如果我必須將服務器遷移到不同的時區,或者創建的服務器分佈在不同的數據中心上,或者如果我需要將日期/時間正確地轉換爲本地值,那麼這會產生一個有趣的問題。我應該如何在SQL中存儲日期/時間對象?
例如,如果我堅持像2011-08-12 12:00:00 GMT-7
這樣的日期,則它將持續爲2011-08-12 12:00:00
。如果我有一個特定時間在世界各地發生的事件,我不得不假定我的服務器存儲日期格式爲GMT-0700(我們甚至不會將夏令時添加到混合中),然後將它們轉換爲日期,具體取決於每個日期用戶的本地時區。如果我有多個服務器在他們自己的時區中存儲日期,所有這些都會失敗。
對於像Hibernate和Django這樣的框架,他們如何處理這個問題?我錯過了什麼,或者這是一個重大問題?
這是最有意義的。我認爲數據庫會自動處理這樣的東西,但是,嘿,沒關係。我可能會將所有內容存儲在UTC中,並根據客戶端時間進行翻譯。我如何強制Django保存在UTC?我有很多使用'auto_now'和'auto_now_add'的字段,這可能會使事情變得複雜。 –
您需要使用'pytz'來完成轉換,然後使用Django來存儲「裸體」時間戳。因爲時區是如此混亂和政治化的概念,所以有一些學習曲線,但老實說API非常好,它涵蓋了所有的角落案例。 – wberry
所以我不應該依賴'auto_now'和'auto_now_add',而應該手動設置這些東西? –