Django若是开启了Time Zone功能,则全部的存储和内部处理,甚至包括直接print
显示全都是UTC的。只有经过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。数据库
因此我建议后台处理时间的时候,最好彻底使用UTC,不要考虑本地时间的存在。而显示时间的时候,也避免手动转换,尽可能使用Django模板系统代劳。django
启用 USE_TZ = True
后,处理时间方面,有两条 “黄金法则”:ide
保证存储到数据库中的是 UTC 时间;函数
在函数之间传递时间参数时,确保时间已经转换成 UTC 时间;spa
好比,一般获取当前时间用的是:code
import datetime now = datetime.datetime.now()
启用 USE_TZ = True
后,须要写成:orm
import datetime from django.utils.timezone import utc utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)
模板it
除非应用支持用户设置本身所在的时区,一般咱们不须要关心模板的时区问题。模板在展现时间的时候,会使用 settings.TIME_ZONE
中的设置自动把 UTC 时间转成 settings.TIME_ZONE
所在时区的时间渲染。模板
通常设置为:class
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False