gpt4 book ai didi

python - Django datetimefield 时区感知 CET

转载 作者:IT王子 更新时间:2023-10-29 06:22:47 28 4
gpt4 key购买 nike

我看到了这个帖子 Is Django corrupting timezone-aware DateTimeField when saving it to the Database?但它专门使用 pytz 和 mysql 以及我不使用 pytz 和使用 SQLite 的地方(以防它可能有影响)。

我有以下模型

class ScheduleItem(models.Model):
work_date = models.DateTimeField('Work date')

然后我按如下方式插入数据:

from isoweek import Week
from dateutil import parser
from django.utils import timezone

def foo()
year = 2016 #hardcoded for example purpose
wknr = 2 #hardcoded for example purpose
dateObj = parser.parse(Week(year, wknr).day(0).isoformat() + " 00:00:00")
print(dateObj) # 2016-01-11 00:00:00 as expected
final = timezone.make_aware(dateObj)
print(final) # 2016-01-11 00:00:00+01:00 as expected
return final


workdate = foo()
si = ScheduleItem(work_date=workdate)
si.save()

打印语句给了我正确的输出,但是一旦我查看数据库 (SQLite),我就会看到 2016-01-10 23:00:00

我的 django 设置说

TIME_ZONE = 'CET'
USE_TZ = True

检索我得到的数据:

datetime.datetime(2016, 1, 10, 23, 0, tzinfo=<UTC>)

为什么它以另一种格式存储数据,然后我指定,为什么如果 Django 设置为时区感知,我会得到一个 UTC 时区?我的意思是在插入日期时间对象之前说:datetime.datetime(2016, 1, 11, 0, 0, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)

更新 -

在此期间,我通过设置 TIME_ZONE 找到了解决方法在 Django 文档中描述的数据库上 here .这为我提供了数据库中正确的时区/日期,但根据该文档,我不需要它,因为我的数据库 由 Django 管理

This allows interacting with third-party databases that store datetimes in local time rather than UTC. To avoid issues around DST changes, you shouldn’t set this option for databases managed by Django.

我仍然不清楚为什么 Django 在将带有 CET 时区的日期时间对象存储在数据库中时确实将其转换为 UTC,但在检索时又不够聪明,无法将其转换回 CET .

最佳答案

Django 在内部使用 UTC 时间。 TIME_ZONE 将用于“您的 View 和模型”( https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-TIME_ZONE )

您从 2016-01-11 00:00 CET 开始,即 2016-01-10 23:00 UTC!您的日期时间已正确保存到数据库并在稍后恢复,因此一切都按预期工作。

关于python - Django datetimefield 时区感知 CET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084164/

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