gpt4 book ai didi

python - 对 django 时区支持感到困惑

转载 作者:行者123 更新时间:2023-11-28 17:32:48 25 4
gpt4 key购买 nike

这里是 Django 初学者。

在官方文档中:

# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

尝试在 ./manage.py shell 中重现它:

In [35]: from django.conf import settings

In [36]: settings.USE_TZ
Out[36]: True

In [37]: settings.TIME_ZONE
Out[37]: 'Europe/Moscow'

In [38]: from django.utils import timezone

# UTC
In [39]: timezone.now()
Out[39]: datetime.datetime(2015, 10, 16, 9, 47, 50, 755418, tzinfo=<UTC>)

# Actual time
In [40]: timezone.datetime.now()
Out[40]: datetime.datetime(2015, 10, 16, 12, 47, 54, 554197)

# UTC
In [41]: timezone.activate("Europe/Moscow"); timezone.now()
Out[41]: datetime.datetime(2015, 10, 16, 9, 47, 59, 405269, tzinfo=<UTC>)

# Actual time
In [42]: timezone.activate("Europe/Moscow"); timezone.datetime.now()
Out[42]: datetime.datetime(2015, 10, 16, 12, 48, 3, 179085)

当我按照文档中的说明运行 timezone.now() 时,我得到的是错误的 UTC。当我运行 timezone.datetime.now() 时(我认为只是调用 datetime.datetime.now(),它使用的是系统范围的时区)我做对了。

尝试了不同的时区,仍然是普通的 UTC。

我做错了什么?

最佳答案

timezone.now() 表现正常:if USE_TZ=True;它以感知日期时间对象(UTC 格式)的形式返回当前时间。

2015-10-16 09:47:50+00:00 (UTC)2015-10-16 12:47:50+03:00 是同一时刻(MSK)。 UTC 时间在模板中使用您当前的时区呈现(默认为 TIME_ZONE 设置,因此无需在此处使用 timezone.activate() 显式设置)。

您可以使用 timezone.localtime(timezone.now()) 显式获取值(您不需要)。

关于python - 对 django 时区支持感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167629/

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