时区在Django中无法正常工作

时间:2016-07-25 11:12:22

标签: python django timezone

我想在Django中更改时区,所以我在这里阅读文档如何做到这一点' s我得到的是什么:

#settings.py
TIME_ZONE = 'Europe/Ljubljana'

#models.py   #date_time gets filled with "auto_now=True")
date_time = models.DateTimeField(auto_now=True)

给定位置(欧洲/卢布尔雅那)的UTC DST偏移量为+2,而在我的数据库中,我看到UTC的时间戳。那我错过了什么?

或者这是否按预期工作,以便单独处理每个请求(对不同时区的人有用)?但如果是这种情况,那么设置TIME_ZONE = 'Europe/Ljubljana'的用途是什么?

1 个答案:

答案 0 :(得分:3)

来自documentation

  

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

所以数据库中的日期时间将始终以UTC格式存储,但会在模板和表单中使用正确的TZ显示。

要在其他地方使用正确的TZ获取日期,请使用astimezone()

>>> from myapp.models import Details
>>> import pytz
>>> d = Details.objects.get(pk=1)
>>> d.added
datetime.datetime(2016, 5, 28, 18, 59, 55, 841193, tzinfo=<UTC>)
>>> localdate = d.added.astimezone(pytz.timezone('Europe/Ljubljana'))
>>> localdate
datetime.datetime(2016, 5, 28, 20, 59, 55, 841193, tzinfo=<DstTzInfo 'Europe/Ljubljana' CEST+2:00:00 DST>)