私はジャンゴを使用しています。
設定で:
TIME_ZONE = 'Europe/Copenhagen'
USE_TZ = True
DST のため、2013 年 3 月 31 日に時計が 1 時間スキップします。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 時間を減算した場合) と、コンピューターの systime を夏の日付に変更した場合 (utc を取得するために 2 時間を減算した場合) の両方で、utc として正しく挿入されました。
私の質問:
.now(local_tz) は機能しますか、それとも間違ってテストしましたか? これが tzinfo = tz と異なるのはなぜですか? それとも、tzinfo を間違って使用していますか?