Django如何使用系统时区?

1 投票
2 回答
50 浏览
提问于 2025-04-13 02:30

不管出于什么原因,当没有指定 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()
...

撰写回答