博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django和Python中的Timezone处理
阅读量:4322 次
发布时间:2019-06-06

本文共 1480 字,大约阅读时间需要 4 分钟。

在现实环境中,存在有多个时区。用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统。所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间计算上产生错误。

为解决这个此类问题,在代码和数据库中统一使用 UTC 时间,仅在与最终用户进行交互时使用本地时间是一个很好的办法 。

Django 默认关闭时区支持,开启时区支持,需要在 settings 中设置 USE_TZ = True 。

# TIME_ZONE = 'UTC'TIME_ZONE = 'Asia/Shanghai'

最好同时安装 pytz 模块(pip install pytz) 。

Naive 和 Aware 类型的 datetime 对象

Python 的 datatime.datetime对象有一个 tzinfo 属性,该属性是 datetime.tzinfo 子类的一个实例,他被用来存储时区信息。当某个 datetime 对象的 tzinfo 属性被设置并给出一个时间偏移量时,我们称该 datetime 对象是 aware (已知) 的。否则称其为 naive (原生) 的。

可以使用 is_aware() 和 is_naive() 函数来判断某个 datetime 对象是 aware 类型或 naive 类型。

  • 当关闭时区时,django 使用原生的 datetime 对象保存本地时间:
import datetimenow = datetime.datetime.now()
  • 当开启时区时,django 使用已知 (aware) 的 datetime 对象存储本地时间:
from django.utils import timezonenow = timezone.now()

而默认Django开启时区且为utc,所以在不改变TIME_ZONE的情况下,django数据库中的时间一定是timezone aware的时间,如果要生成时间,要通过replace timezone设置为本地时区。

数据库中的时间都是utc时间

Django中的timezone

from django.utils import timezone     t=timezone.now()     print(t)datetime.datetime(2016, 1, 4, 2, 13, 54, 582231, tzinfo=
) new_t=timezone.localtime(t) print(new_t)datetime.datetime(2016, 1, 4, 10, 13, 54, 582231, tzinfo=
)

Python中的datetime

import datetime    t = datetime.datetime.strptime("2016-1-4", "%Y-%m-%d")    print(t)datetime.datetime(2016, 1, 4, 0, 0)    new_t = t.replace(tzinfo=(pytz.timezone('Asia/Shanghai')))    print(new_t)datetime.datetime(2016, 1, 4, 0, 0, tzinfo=
)

转载于:https://www.cnblogs.com/sunxiuwen/p/9960523.html

你可能感兴趣的文章
玩转webpack之webpack的entry output
查看>>
java 操作mongodb查询条件的常用设置
查看>>
黑马程序员_java基础笔记(02)...java语言基础组成
查看>>
关于缓存击穿
查看>>
对innodb 拷贝文件实现数据库的方式(转)
查看>>
python知识点 2014-07-09
查看>>
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
小白的python进阶历程------05.占位符
查看>>
CF414BMashmokh and ACMDP
查看>>
Notepad++ 通过g++编译
查看>>
JAVA基础2——类初始化相关执行顺序
查看>>
转:Zend Framework 重定向方法(render, forward, redirect)
查看>>
Linux下查看磁盘与目录的容量——df、du
查看>>
关于日记app的思考
查看>>
使用sencha的cmd创建项目时提示找不到\Sencha\Cmd\repo\.sencha\codegen.json
查看>>
如何快速启动一个Java Web编程框架
查看>>
MSP430单片机存储器结构总结
查看>>