Django如何使用系统时区?
不管出于什么原因,当没有指定 TIME_ZONE
时,django 默认使用 America/Chicago
这个时区。
我的服务器是在本地设备上运行的,所以系统时区各不相同,如果人们移动位置,时区还可能会改变。有没有办法解决这个问题呢?
我只是想让 os.environ["TZ"]
不被设置,这可能吗?因为django在启动时会把这个变量设置为芝加哥的时区。
2 个回答
0
'America/Chicago' 是一个默认的时区。
当你把 USE_TZ 设置为 False 时,Django 默认使用 'America/Chicago' 这个时区。有趣的是,即使你把 USE_TZ 设置为 True,只要不设置 TimeZone,Django 仍然会默认使用 'America/Chicago' 的时区。实际上,从 Django 5.0 开始,时区支持默认是开启的。
Django 会设置环境变量,让它的进程在默认时区下运行。这和 USE_TZ 的值以及当前时区无关。
Django 会自动设置 TZ 环境变量。
我只想让 os.environ["TZ"] 不被设置,这可能吗?
是的,这是可能的。为此,你需要手动设置 配置。
不过,最好还是使用时区,并将其设置为 UTC(Django 推荐这样做)。
即使你的网站只在一个时区内可用,仍然建议在数据库中以 UTC 存储数据。主要原因是夏令时(DST)。许多国家都有夏令时的制度,春天时钟会向前调,秋天时钟会向后调。如果你在使用本地时间,可能会在每年两次的时间转换时遇到错误。
1
你可以把它设置为空字符串,这样就会使用系统的时区:
...
TIME_ZONE = ""
...
你还可以使用 tzlocal
这个库(我记得它是Django的一个依赖)来确定当前系统的时区:
import tzlocal
...
TIME_ZONE = tzlocal.get_localzone_name()
...