Django:无法理解TIME_ZONE配置

时间:2018-02-14 00:34:08

标签: django django-settings django-timezone

我测试了一些时区配置,以便更好地了解django时区的工作原理。

但仍然无法理解它是如何运作的。

有一些问题并需要你的帮助

Q1。

from django.utils import timezone
from datetime import datetime

1. TIME_ZONE='UTC', USE_TZ=True
    - datetime.now() => 2018-02-13 23:26:01.576493      // naive..
2. TIME_ZONE='Asia/Seoul', USE_TZ=True
    - datetime.now() => 2018-02-13 23:26:01.576493    // tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>

=&GT;为什么在'UTC'情况下返回naive日期时间对象...?和2中一样,我认为它应该返回tzinfo=<UTC>对象......

Q2。

from django.utils import timezone
from datetime import datetime

1. TIME_ZONE='Asia/Seoul', USE_TZ=True
    - timezone.now() => 2018-02-13 23:25:32.768780    // tzinfo=<UTC> object

2. TIME_ZONE = 'Asia/Seoul', USE_TZ = False
    - timezone.now() => 2018-02-14 08:24:04.810045    // naive

=&GT;为什么timezone.now()在第一种情况下会返回tzinfo=<UTC> object,即使我将TIME_ZONE设置为'Asia/Seoul'

Q3。

1. TIME_ZONE = 'Asia/Seoul', USE_TZ = False
    - timezone.localtime() => ValueError: localtime() cannot be applied to a naive datetime

即使我设置了TIME_ZONE

,为什么会出现错误

此外,即使在阅读了django官方文档之后,也无法理解USE_TZ究竟是什么(它的角色......等)。我认为官方文档就像,只有那些已经知道那些是什么的人才能阅读.T_T

1 个答案:

答案 0 :(得分:1)

Q1。

datetime.now()是一个Python实用程序,它与Django无关,不会受任何Django设置的影响。实际上,您的第二个结果不正确,tzinfo在两种情况下都是None

Q2。

来自documentation:“如果USE_TZTrue,则这将是一个表示UTC中当前时间的有效日期时间。 TIME_ZONE与此无关。

Q3。

如上所述,如果USE_TZFalse,则日期时间是天真的。并且documentation说:“[localtime]不适用于天真的日期时间。”