关于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

时间: 2024-10-18 19:12:28

关于django的时区设置的相关文章

Django的时区设置问题

1.Django的时区问题 django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题.之前程序在测试时是运行在Windows环境,所以即使settings.py中的TIME_ZONE使用默认时区,Django也会根据本机的时区使用当前时区时间.然而程序放到linux运行程序时,Django的时区会使用settings.py中的TIME_ZONE设置的时区,所以这时就出现了问题.再有当我用脚本在linux上

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

django在settings配置中设置过TIME_ZONE = 'Asia/Shanghai'后,显示界面正常了,但是向数据库写入时间的时候,会比正常时间早8小时,在后端提示错误 RuntimeWarning: DateTimeField 模型类.字段 received a naive datetime (2018-xx-xx xx:xx:xx.137670) while time zone support is active. RuntimeWarning) 解决办法: 在settings.

Django 1.11 正确的时区设置

Django 1.11的时区设置和原来的不同了: 文件:setting.py LANGUAGE_CODE = 'zh-CN' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True 原来这么写,没问题,但是1.11不可以这么写!否则服务器就要报错哦!正确写法是: LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True US

Django时区设置的郁闷

第一次在windows下看到这个设置的时候,就设置成Ubuntu上时区设置的字符串“Asia/Shanghai”,结果报错通不过,最后记不清楚从哪儿查的,改成GMT+8. 最近把应用放到Linux上做一些生产环境下的问题解决,发现上面那个时区设置有问题,查了一下,linux上又得改回成“Asia/Shanghai”.我去,两个系统能不能稍微标准化一下.

PYTHON 与 DJANGO 的时区问题

在编码中牵扯到时间问题的时候,总是容易被时区问题搞混,一直以来,都是反复试验应付过去,今天终于搞清楚了个中缘由,一个心结也得以化解. Python 的时区问题 datetime.today() / datetime.now()这两个函数获得的是当前的系统时间,但得到的datetime对象中的tzinfo是空的,即使系统中设置了时区. datetime.utcnow()这个函数获得当前的utc时间,应该是根据当前系统时间和时区来计算的.例如系统时间为14:00,时区为 Asia/Shanghai

Apache下部署Django日志时区显示不正确的问题

django 1.5的settings.py 里面默认的时区设置与1.8的默认不一样 1.8下默认TIME_ZONE = 'UTC' 如果部署到Apache上,access.log下时间如 [23/Jun/2017:04:15:05 +0000] 那么与本地时区不一致, 改成TIME_ZONE = 'Asin/Shanghai' 日志显示东八区的时间 24/Jun/2017:11:47:40 +0800

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05-17, 修改日期: 2014-05-18 在Django 1.6中的settings.py中可以修改130多项设置, 但大多数都继承自默认值. 设置是在web服务器启动时首次载入的, 服务器重启时重新载入, 因此, 程序员们应尽量避免修改正式服务器上使用的settings.py文件. 以下是一些我们

linux下的时间及时区设置

一.时间设置及同步 1修改系统时间 #date -s 06/18/14 #date -s 14:20:50 2命令查看.设置硬件时间 #hwclock  --show 或者clock  --show #设置硬件时间 hwclock --set --date="06/18/14 14:55" 或者# clock --set --date="06/18/14 14:55" 3同步系统及硬件时钟 # hwclock --hctosys 或者 # clock --hctos

ubuntu server 时区设置问题解决

1.当执行此命令的时候 ntpdate us.pool.ntp.org 出现一下错误提示 name server cannot be used: Temporary failure in name resolution 2.解决办法(添加DNS服务器) vi /etc/resolv.conf 添加: nameserver 8.8.4.4 3.国内常用NTP服务器地址及IP2011-09-07 15:06:08210.72.145.44 (国家授时中心服务器IP地址)133.100.11.8 日本