关于django的时区设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于django的时区设置相关的知识,希望对你有一定的参考价值。

    Django如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。

    所以我建议后台处理时间的时候,最好完全使用UTC,不要考虑本地时间的存在。而显示时间的时候,也避免手动转换,尽量使用Django模板系统代劳。

 

   启用 USE_TZ = True 后,处理时间方面,有两条 “黄金法则”:

  1. 保证存储到数据库中的是 UTC 时间;

  2. 在函数之间传递时间参数时,确保时间已经转换成 UTC 时间;

    比如,通常获取当前时间用的是:

import datetime
now = datetime.datetime.now()

   启用 USE_TZ = True 后,需要写成:

import datetime 
from django.utils.timezone import utc
utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)

  模板

      除非应用支持用户设置自己所在的时区,通常我们不需要关心模板的时区问题。模板在展示时间的时候,会使用 settings.TIME_ZONE 中的设置自动把 UTC 时间转成 settings.TIME_ZONE 所在时区的时间渲染。


一般设置为:

 TIME_ZONE = ‘Asia/Shanghai‘

 USE_TZ = False


以上是关于关于django的时区设置的主要内容,如果未能解决你的问题,请参考以下文章

关于 django 的时区设置与MySQL 时间相差8小时

Django的时区设置问题

django 默认时区设置

为啥Django时区设置会影响纪元时间?

Django 时间与时区设置问题

Django 时间与时区设置问题