Django之时区问题

在django项目中,会有时间时区的问题

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

为解决这个此类问题,在代码和数据库中统一使用 UTC 时间,仅在与最终用户进行交互时使用本地时间是一个很好的办法 。
Django 默认关闭时区支持,开启时区支持,需要在 settings 中设置 USE_TZ = True 。
在这里插入图片描述
可以通过Django的timezone模块,来查看当前时间所属的的时区
在这里插入图片描述

将时区设置为中国地区的东八区

在这里插入图片描述
查看时间得到:
在这里插入图片描述
因为中国属于东八区,就是说对世界标准时间来说快整整8个小时,

总的原理:

  • 进入到django数据库中的时间一定是timezone aware的时间,如果要生成时间,要通过replace
    timezone设置为本地时区。
  • 数据库中的时间都是utc时间
from django.utils import timezone
>>> t=timezone.now()
>>> t
datetime.datetime(2016, 1, 4, 2, 13, 54, 582231, tzinfo=<UTC>)
>>>new_t=timezone.localtime(t)
>>>new_t
datetime.datetime(2016, 1, 4, 10, 13, 54, 582231, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>>import datetime
>>>t = datetime.datetime.strptime("2016-1-4", "%Y-%m-%d")
>>>t
datetime.datetime(2016, 1, 4, 0, 0)
>>>new_t = t.replace(tzinfo=(pytz.timezone('Asia/Shanghai')))
>>>new_t
datetime.datetime(2016, 1, 4, 0, 0, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)
  • 当关闭时区时,django 使用原生的 datetime 对象保存本地时间:
import datetime
now = datetime.datetime.now()
  • 当开启时区时,django 使用已知 (aware) 的 datetime 对象存储本地时间:
from django.utils import timezone
now = timezone.now()

实践:

当USE_TZ = True

from django.utils import timezone
t=timezone.now()
        print(t)    # 结果为: 2020-06-30 08:36:48.186132+00:00

当USE_TZ = False

from django.utils import timezone
t=timezone.now()
        print(t)    # 结果为: 2020-06-30 16:36:18.909139

本地时间大概是:2020-06-30 16
注意看他们两的结果,支持时区时,得到的是UTC时间,反之得到的是本地区时间(在这里是东八区时间)
由于操作有时间差,但是2020-06-30 16:36:18.909139减去2020-06-30 08:36:48.186132+00:00,基本上就是8小时

由于timezone生成的时间是本地时区的时间,所以在进行一些时间比较时,使用timezone就比较好,可以让时间本地化,不用担心跨时区问题,自己一点所得,有点乱,如果有大神指点,再好不过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值