一些比较好的阅读资料:
一篇文章解决django中时区问题
概念
- naive time:不带时区的时间,如2015-05-11 09:10:33.080451,使用
datetime.datetime.utcnow()
、datetime.datetime.now()
等输出的 - active time:带时区的时间,如2015-05-11 09:05:19.936835+00:00,
django.util.timezone.now()
等输出的 - UTC时间:第一,表示的是格林尼治平均时,即零区时间。而北京时间表示的是东八区时间,即UTC+8。第二,当我们说获取的是UTC时间,其实就是在说是active time带时区的时间
django时间的时区问题
django 下 PostgreSQL 时区问题整理,主要从源码角度
python:
Django数据库时间存储使用DateTimeField
,从数据库取出这个字段,类型是datetime.datetime
。下文称这个datetime.datetime
为my_time
from pytz import timezone
my_time.tzinfo #显示时区
my_time.astimezone(timezone("Asia/Shanghai")) #修改时区
my_time.strftime("%Y-%m-%d %H:%M:%S %z") #根据想要的格式显示日期时间
问题
1、postgresql存储的是UTC时间(如18:00+08),Django用serializer取出来默认是零区时间(如10:00)
看了一下我的settings.py中,USE_TZ = True,TIME_ZONE = ‘UTC’,猜测大概以为我这边时区就是UTC零区时间,所以用10:00了。后来把TIME_ZONE = ‘Asia/Shanghai’,输出时间就是18:00+08这样了。但是有个问题,如果对方是在其他时区,是否这个设置也会把他们当作上海时区进行输出?
https://blog.youkuaiyun.com/wy00703/article/details/45071277这个链接应该能解决我的部分问题