【问题标题】:django DateTimeField with UTC offset?带有UTC偏移量的django DateTimeField?
【发布时间】:2012-12-14 00:35:57
【问题描述】:

我有一个带有 DateTimeField 的模型:

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

应允许用户在字段中输入日期、时间和时区信息。这是我想要的格式:

2012-12-31 23:30 +0430

我希望在存储到数据库之前将时间转换为 UTC。所以我尝试为此使用模型表单,但如果我输入上面的值,它会在该 DateTimeField 上引发 Enter a valid date/time. 验证错误。

这是在 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

日期时间似乎无法处理“%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'

我真的觉得这应该可行。我是否错过了文档中另有说明的部分内容?

【问题讨论】:

标签: python django django-timezone


【解决方案1】:

当您在设置中设置USE_TZ = True 时,Django 在数据库中以UTC 格式存储日期和时间信息,否则它将存储naive 日期时间(没有时区的日期时间)。

在大多数情况下,使用 Django 的时区支持非常方便,因为输入和输出日期时间将由 Django 自动转换。

但如果您确实需要用户输入时区,则需要设置 USE_TZ = False,然后使用 DateTimeField 和 CharField 将时区信息存储在您的 models.py 中。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2022-06-27
  • 2017-03-17
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多