Django时区现在,我错过了什么?

时间:2017-04-19 09:08:04

标签: python django datetime timezone

我很难理解时区如何在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()真的会有时区感知,不是吗?

1 个答案:

答案 0 :(得分:1)

启用USE_TZ后,Django会以UTC格式存储所有日期时间,并使用TIME_ZONE设置显示存储的时区。

来自django' timezone docs

  

当启用对时区的支持时,Django会存储日期时间   数据库中的UTC信息使用时区感知日期时间   内部对象,并将它们转换为最终用户的时区   模板和表格。