ylg娱乐官网django时间的时区难题

from django.utils import timezone

add by zhj:
使用django时,如果设置USE_TZ=True,那django在数据库中存储的是0时区的时间;如果USE_TZ=False,那存储的是本地时间

在用django1.8版本做项目的时候遇到时间的存储与读取不一致的问题,网上找了很多帖子,但都没有讲明白。本文将在项目中遇到的问题及如何解决的尽可能详细的记录下来,当然本文参考了网上大量相关文章。

print timezone.localtime(thetime)   
#thetime即为需要转换的时间

原文:

在django1.4以后,存在两个概念:naive time 与 active time。简单点讲,naive time就是不带时区的时间,相关Active time就是带时区的时间。举例来说,使用datetime.datetime.utcnow()、datetime.datetime.now()输出的类似2015-05-11 09:10:33.080451就是不带时区的时间(naive time),而使用django.util.timezone.now()输出的类似2015-05-11 09:05:19.936835+00:00的时间就是带时区的时间(Active time),其中+00:00表示的就是时区相对性。

另外:django中获取当前时间不要用datetime.today(),要用timezone.now()

在用django1.8版本做项目的时候遇到时间的存储与读取不一致的问题,网上找了很多帖子,但都没有讲明白。本文将在项目中遇到的问题及如何解决的尽可能详细的记录下来,当然本文参考了网上大量相关文章。

另外一个概念UTC时间。这里不做过多介绍,需要知晓的是UTC时间表示的是格林尼治平均时即可,即零区时间。而北京时间表示的是东八区时间,即UTC+8。

在django1.4以后,存在两个概念:naive time 与 active time。简单点讲,naive time就是不带时区的时间,相关Active time就是带时区的时间。举例来说,使用datetime.datetime.utcnow()、datetime.datetime.now()输出的类似2015-05-11 09:10:33.080451就是不带时区的时间(naive time),而使用django.util.timezone.now()输出的类似2015-05-11 09:05:19.936835+00:00的时间就是带时区的时间(Active time),其中+00:00表示的就是时区相对性。

下面列出了几个常见的时区问题,并提供相关原因,如有不对,欢迎指出。

另外一个概念UTC时间。这里不做过多介绍,需要知晓的是UTC时间表示的是格林尼治平均时即可,即零区时间。而北京时间表示的是东八区时间,即UTC+8。

问题一:三个时间datetime.datetime.now()、datetime.datetime.utcnow()与django.util.timezone.now()的区别

下面列出了几个常见的时区问题,并提供相关原因,如有不对,欢迎指出。

datetime.datetime.now():输出的永远是本地时间(naive time)与配置无任任何关系。datetime.datetime.utcnow():如果setting中配置USE_TZ=True则输出的是UTC时间(naive time),如果setting中配置USE_TZ=False,则该输出时间与datetime.datetime.now()完全相同。django.util.timezone.now():如果setting中配置USE_TZ=True则输出的是UTC时间(active time),如果配置USE_TZ=False,则与datetime.datetime.now()完全相同。

问题一:三个时间datetime.datetime.now()、datetime.datetime.utcnow()与django.util.timezone.now()的区别

问题二:django存储到数据库的时间比本地时间小8个小时?

发表评论

电子邮件地址不会被公开。 必填项已用*标注