我测试了一些时区配置,以便更好地了解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
答案 0 :(得分:1)
Q1。
datetime.now()
是一个Python实用程序,它与Django无关,不会受任何Django设置的影响。实际上,您的第二个结果不正确,tzinfo
在两种情况下都是None
。
Q2。
来自documentation:“如果USE_TZ
为True
,则这将是一个表示UTC
中当前时间的有效日期时间。 TIME_ZONE
与此无关。
Q3。
如上所述,如果USE_TZ
为False
,则日期时间是天真的。并且documentation说:“[localtime]不适用于天真的日期时间。”