4

私はVoteフィールドで呼び出されたモデルを持っていますdate:

date = models.DateTimeField(auto_now_add=True)

要素を追加すると、MySQL の日付は UTC 日付ですが、UTC+2 タイムゾーンに住んでいます

タイムゾーンを正しく設定したと思いますsettings.py

TIME_ZONE = 'Europe/Paris'

Python は正しいタイムゾーンを使用します:

>>> print datetime.datetime.now()
2013-07-03 09:05:04.474000

MySQL も :

> SELECT NOW( )
2013-07-03 09:00:48

日付属性を手動で設定できましたが、動作しますが、python と mysql が正しいタイムゾーンを使用しているにもかかわらず、auto_now_add が間違った日付を返す理由を知りたいです。

ありがとうございました

4

1 に答える 1

10

説明するのは複雑なバインディングです。Django 1.4から、

USE_TZ が False の場合、これは Django がすべての日時を保存するタイム ゾーンです。USE_TZ が True の場合、これは Django がテンプレートに日時を表示し、フォームに入力された日時を解釈するために使用するデフォルトのタイム ゾーンです。

これは を指しTIME_ZONEます。それで、あなたは何USE_TZですか?Trueの場合USE_TZ、Django は日時を UTC で保存TIME_ZONEし、テンプレートに表示してフォームを解釈するために使用します。

これはTIME_ZONE、別の地域でサイトをホストしているときに後で変更した場合、日付時刻を UTC から指定されたタイムゾーンに簡単に変換できるためです。

Django 1.3以前では、

これは、Django がすべての日付/時刻を変換するタイム ゾーンであることに注意してください。必ずしもサーバーのタイム ゾーンとは限りません。たとえば、1 つのサーバーが複数の Django を利用したサイトにサービスを提供し、それぞれに別のタイムゾーン設定があるとします。

通常、Django は os.environ['TZ'] 変数を TIME_ZONE 設定で指定したタイム ゾーンに設定します。したがって、すべてのビューとモデルは正しいタイム ゾーンで自動的に動作します。

ただし、日時がデータベースに保存されるタイムゾーンはわかりません。とにかく実験する必要があります(私の推測ではUTCです)。

print datetime.datetime.now()経由で python コンソールを開いた場合を除き、サーバー マシンのタイムゾーン設定に従ってデータ時刻を出力しますmanage.py shell

MySQL コンソールについても同様です。私が正しければ、データベースに保存されているものではなく、マシンのタイムゾーンで日時が表示されます。

于 2013-07-03T07:34:40.850 に答える