Python Django时区是如何工作的?
因此,在我的设置中,我有以下内容:Python Django时区是如何工作的?,python,django,datetime,timezone,Python,Django,Datetime,Timezone,因此,在我的设置中,我有以下内容: LANGUAGE_CODE = 'en-us' USE_I18N = True USE_L10N = True USE_TZ = True TIME_ZONE = 'Europe/Copenhagen' 然而,当我发布: timezone.now() datetime.datetime(2015, 9, 26, 8, 47, 15, 862729, tzinfo=<UTC>) timezone.now() datetime.dateti
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = 'Europe/Copenhagen'
然而,当我发布:
timezone.now()
datetime.datetime(2015, 9, 26, 8, 47, 15, 862729, tzinfo=<UTC>)
timezone.now()
datetime.datetime(2015,9,26,8,47,15,862729,tzinfo=)
时间晚了两个小时
我正在阅读文档,我可以看到这个方法调用datetime.datetime(),其中的信息是正确的。我可以看到输出基于可变时区,该时区设置为我的当前位置。现在()不应该得到正确的时区时间吗
另一个问题:datetime.datetime()是否从服务器获取信息
Europe/Copenhagen
为UTC+2)timezone.make_naive(timezone.now(), timezone.get_current_timezone())
关于时区感知日期时间,重要的不是它们恰好存储在哪个时区,而是它们代表单个时间点的事实。如果这是真的,那么在您想要的时区中显示datetime就很简单了(好吧,无论如何都有可能) 因此,Django的工作方式是所有可感知的日期时间都存储在UTC中。(即使如此,它们也可能在UTC中从数据库返回,具体取决于数据库设置。)然后,它为您提供了工具(例如
时区设置和设置)来设置在呈现模板供用户显示时应使用的时区
所以你所描述的一切都是精心设计的。它真的会给您带来问题吗?我在models.py中添加了timezone.now,以便在某些类中标记修改时间。难道没有更好的方法吗?为什么建议使用简单的datetime对象?如果USE_TZ=True
则timezone.now().astimezone(timezone.get_current\u timezone())
返回当前时区中的感知日期时间对象。尽管您不需要手动调用.astimezone()
;如果我在settings.py上设置时区,然后调用timezone.now(),它不应该返回正确的时间吗?正如我提到的,它返回一个时间对象,两个时间对象是您之前的。@E.Camilo:UTC的上午8点和欧洲/哥本哈根的上午10点(使用DST)在时间上完全相同。所以现在是正确的时间。TIME\u ZONE
设置告诉Django用户显示的默认时区,它不影响Python对象中使用的时区。如果你真的想转换它,你可以(见#2),但这是一个不常见的用例。我想当我将时区设置为“欧洲/哥本哈根”时,时区参考将自动设置为UTC+2。这就是让我困惑的原因。