20

DateTimeField を持つモデルがあります。

deadline = models.DateTimeField(verbose_name="Valid unitl", null=True, blank=True)

ユーザーは、フィールドに日付、時刻、およびタイムゾーン情報を入力できる必要があります。これは私の希望の形式です:

2012-12-31 23:30 +0430

dbに保存する前に、時間がUTCに変換されると思います。そのためのモデルフォームを使用してみましたが、Enter a valid date/time.上記の値を入力すると、その DateTimeField で検証エラーがスローされます。

これはsettings.pyにあります:

DATE_INPUT_FORMATS = ('%Y-%m-%d %H:%M %Z', )

私は何が欠けていますか?

編集:

Видул Петров の提案に従って、フォーム フィールドを使用しようとしました。

deadline2 = forms.DateTimeField(input_formats=['%Y-%m-%d %H:%M %Z',],

同じ効果を得ました:Enter a valid date/time.

編集 2

datetime は「%z」パラメータを処理できないようです。これは ValueError をスローします:

datetime.datetime.strptime(value, format)

だから私はコンソールでそれをテストしました:

>>> import datetime
>>> datetime.datetime.strptime('2012-12-30 19:00 +0100', "%Y-%m-%d %H:%M %z")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M %z'

ピッツも試しました:

>>> import pytz
>>> pytz.datetime.datetime.strptime('2012-12-30 19:00 +0100', "%Y-%m-%d %H:%M %z")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M %z'

これはうまくいくはずだと本当に感じています。そうでないと言っているドキュメントの一部を見逃しましたか?

4

1 に答える 1

25

設定で設定すると、 DjangoUSE_TZ = Trueは日付と時刻の情報を UTC でデータベースに保存します。

ほとんどの場合、Django のタイム ゾーン サポートを使用すると、入力および出力の日時が Django によって自動的に変換されるため、非常に便利です。

ただし、ユーザーからのタイムゾーン入力が本当に必要な場合は、設定しUSE_TZ = Falseて、単純な datetime である DateTimeField と CharField を使用して、models.py にタイムゾーン情報を保存する必要があります。

参照: https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/

于 2013-02-05T18:57:11.027 に答える