我很难理解时区如何在django中运行,所以我查看了django/utils/timezone.py中的源代码,我找到了以下代码:
def now():
"""
Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()
我并不理解为什么提供的tzinfo不依赖于settings.py的TIME_ZONE。
不应该是那样的吗?
return datetime.utcnow().replace(tzinfo=get_default_timezone())
这样timezone.now()真的会有时区感知,不是吗?
答案 0 :(得分:1)
启用USE_TZ
后,Django会以UTC格式存储所有日期时间,并使用TIME_ZONE
设置显示存储的时区。
来自django' timezone docs:
当启用对时区的支持时,Django会存储日期时间 数据库中的UTC信息使用时区感知日期时间 内部对象,并将它们转换为最终用户的时区 模板和表格。