0

我已经测试了一些时区配置,以更好地了解 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>

=> 为什么'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

=>为什么在第一种情况下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

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

4

1 回答 1

2

Q1。

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

Q2。

文档中:“如果USE_TZTrue,这将是一个代表当前时间的感知日期时间UTC”。TIME_ZONE在这里不相关。

Q3。

如上所述,如果USE_TZFalse日期时间是天真的。并且文档说:“[localtime] 在幼稚的日期时间上不起作用”。

于 2018-02-14T00:54:16.267 回答