我有一个带有 DateTimeField 的模型:
deadline = models.DateTimeField(verbose_name="Valid unitl", null=True, blank=True)
应允许用户在字段中输入日期、时间和时区信息。这是我想要的格式:
2012-12-31 23:30 +0430
我希望在存储到数据库之前将时间转换为 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'
还尝试了pytz:
>>> 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'
我真的觉得这应该工作。我是否错过了其他说明的文档的某些部分?