gpt4 book ai didi

python - 具有UTC偏移量的django DateTimeField?

转载 作者:太空狗 更新时间:2023-10-29 17:46:04 31 4
gpt4 key购买 nike

我有一个带有 DateTimeField 的模型:

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

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

2012-12-31 23:30 +0430

我希望在存储到数据库之前将时间转换为 UTC。因此,我尝试为此使用模型表单,但如果我输入上面的值,它会抛出 Enter a valid date/time. validation error on that DateTimeField。

这是在 settings.py 中:

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

我错过了什么?

编辑:

根据 Видул Петров 的建议,尝试使用表单域:

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

得到相同的效果:输入一个有效的日期/时间。

编辑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'

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

最佳答案

当您在设置中设置 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/

关于python - 具有UTC偏移量的django DateTimeField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074696/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com