我正在使用Django。Python Django:tzinfo不適用於數據庫插入。但爲什麼.now(local_tz)有效?
在設置:
TIME_ZONE = 'Europe/Copenhagen'
USE_TZ = True
由於DST,時鐘會在2013年3月31日一個小時。 01:59前往03:00
我的觀點:
的日期和時間在本地時間中給出。我希望這些插入爲utc。
下面的代碼正確保存爲UTC,但給人RuntimeWarning:DateTimeField字段收到一個天真的日期時間
the_date = datetime.datetime(2013, 3, 31, 1, 59)
hit = hits(date= the_date); hit.save(); # Correctly saved as 00:59:00
the_date = datetime.datetime(2013, 3, 31, 3, 1)
hit = hits(date= the_date); hit.save(); # Correctly saved as 01:01:00
我想我可以通過將日期時間知曉避免該警告。它確實避免了警告,但轉換現在是錯誤的。
tz = timezone(settings.TIME_ZONE)
the_date = datetime.datetime(2013, 3, 31, 3, 1, tzinfo = tz)
hit = hits(date= the_date); hit.save(); # Incorrectly saved as 02:01:00
下工作,沒有運行時錯誤:
I have installed pytz.
the_date = local_tz.localize(datetime.datetime(2013, 3, 31, 3, 1))
前往我的問題:
我得到tzinfo不起作用,因爲它不考慮夏令時。好吧,我不會用它。但後來我很困惑,當以下似乎工作:
the_date = datetime.datetime.now(local_tz)
這正確插入爲UTC無論是在冬季(其中減去了1小時,以獲得UTC),當我改變了我的電腦SYSTIME一個日期在夏季(它減去2小時得到utc)。
我的問題:
請問。現在(local_tz)工作還是我測試它錯了嗎?爲什麼這與tzinfo = tz不同?或者我使用tzinfo錯誤?
它也適用於localize(),包括dst。我可以插入罰款(至少我認爲是這樣)。問題是爲什麼datetime.now(local_tz)在設置tzinfo時不工作?我可以像那樣使用datetime.now(local_tz)。 (我很好奇看到一個正常化的例子,但本地化不是,但這是另一個問題......) – user984003
似乎有些情況下,'normalize'確實是必要的,儘管我不能給你現在就是一個例子。我將留下供參考的答案。無論如何,如果你的時區是恆定的,我真的建議總是在內部使用UTC,並且只能從/到本地時間進行輸入/輸出轉換:它會爲你節省一些麻煩。 –
是的,我同意儘可能使用utc。但我真正想要的是理解這些東西,而不是隻有一種方法可行。這是我不明白的。 (我有時會在當地時間給出日期,我需要處理這些日期。) – user984003