我正在使用Django應用程序,我需要以UTC保存所有postgres表示的日期時間字段(他們應該)。當我使用日期時間字段創建模型時,他們將數據庫表示形式生成爲「時間戳,時區爲」。 儘管我可以手動修改表格以從字段中刪除時區,但我想知道DateTime模型字段是否有能力不這樣做 - 即爲某些字段創建「時間戳帶有時區」。 這可能嗎?或者我必須改變它們的表格? 謝謝, HarelDjango DateTime字段生成沒有時區的時間戳字段
3
A
回答
4
Django中postgres的數據類型映射到字符串文字timestamp with time zone
,似乎沒有改變該類型的選項。
據我所知,你有三種選擇:
充分利用Django的鉤執行raw sql after the create table statement。爲此,請在您的應用中創建一個名爲
sql
的目錄,並在該目錄中創建一個名爲mymodel.postgres_psycopg2.sql
的文件。將您的alter table語句放在那裏。編寫自定義字段以根據需要定義時間戳字段的修飾符。參見「writing custom model fields」。
讓django字段保持原樣,並在應用程序中執行時區轉換,以便您完全確定您正在傳遞正確的時間。
我個人對數據完整性的偏好是#3。就像字符編碼一樣,在那裏你總是想知道字符集並正確處理轉換,對於其屬性(包括TZ)被精確定義的日期/時間,我感覺更加舒適。您今天可能確定您的所有輸入已經以UTC來到您的應用程序,但可能會發生變化,特別是如果時間戳由最終用戶提供。對於它的價值,我會多花一點時間,將應用程序中的時間戳轉換爲UTC,然後將其存儲在數據庫中,以UTC作爲時區。
相關問題
- 1. django中的時間戳字段
- 2. 查詢時間戳字段在Django
- 3. PHPMyAdmin 2時間戳字段
- 4. MySQL時間戳字段
- 5. 刪除24小時前發生時間戳的所有字段
- 6. JPA/Hibernate的自動生成的時間戳字段沒有加載
- 7. DateTimeField字段沒有時間
- 8. PG Promise沒有正確返回「帶時區的時間戳」字段
- 9. datetime字段沒有遷移django
- 10. 在django模型有一個默認的時間戳字段?
- 11. 將字符串時間戳插入到具有時間戳字段的db中
- 12. Django時間字段差異
- 13. Django 1.5 - 時間字段
- 14. SQL中DateTime字段的時間部分
- 15. Django的DateTimeField字段凌亂與天真,知道時間戳字段中的PostgreSQL
- 16. 不能插入unix時間戳到表的時間戳字段
- 17. Django:時間戳字符串自定義字段
- 18. 輸出時區知道沒有過濾器的django日期時間字段
- 19. datetme,mysql中的時間戳字段
- 20. 返回elasticsearch中的時間戳字段
- 21. Fload中的時間戳字段問題
- 22. Django的Postgres的時間字段到Python的datetime
- 23. ActiveModel時間戳記字段:時間戳記從哪裏來?
- 24. mongoengine datetime字段和python日期時間
- 25. 從DateTime字段中刪除時間
- 26. Postgresql:如何從時間戳,時區字段正確創建帶時區的時間戳
- 27. 在Python中添加來自現有unix時間戳字段數據框的時間戳相關字段
- 28. cakePHP時間戳字段沒有正確保存
- 29. MySQL按時間戳排序,沒有該字段
- 30. 防止從Django的解析不正確的時間戳字段
謝謝Jarret, 我在我的應用程序中進行時區轉換,因爲我不信任任何具有時區的人; o)我打算將所有日期存儲爲UTC,並且由於我知道用戶的時區,所有用戶輸入的日期都將轉換爲UTC,然後將任何內容保存到數據庫。 但是,我想將創建/修改日期當作UTC來處理,但是好像Django會在字段中保存時區偏移量,即使我的settings.TIMEZONE是UTC(如果我在第25天保存了創建日期將它保存爲+01的偏移量,因爲英國在DST那一次。因此,爲什麼我想殺死db tz info。 – Harel 2009-12-08 20:29:07
有道理......在這種情況下,我會投票選擇上面的選項# – 2009-12-08 20:32:37
另一種選擇是以UTC運行服務器本身。 http://serverfault.com/questions/14685/local-timezones-on-servers-considered-harmful – Harel 2009-12-08 22:21:02