无效的Django时区

11 投票
2 回答
20269 浏览
提问于 2025-04-16 16:12

最近在构建项目时,我运行了Django的syncdb命令,结果出现了一个错误:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/management/__init__.py", line 252, in fetch_command
    app_name = get_commands()[subcommand]
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/management/__init__.py", line 101, in get_commands
    apps = settings.INSTALLED_APPS
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/utils/functional.py", line 276, in __getattr__
    self._setup()
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/conf/__init__.py", line 125, in __init__
    raise ValueError("Incorrect timezone setting: %s" % self.TIME_ZONE)
ValueError: Incorrect timezone setting: America/New_York EST5EDT SystemV/EST5EDT US/Eastern

我没有更改任何核心设置,所以我不知道为什么会突然出现这个错误。在我的settings.py文件中,TIME_ZONE = 'America/New_York'这个值是有效的,具体可以参考时区数据库的时区列表。为什么Django不接受这个值呢?

2 个回答

0

我遇到了下面这个错误。*我使用的是 Django 4.2.1

zoneinfo._common.ZoneInfoNotFoundError: '没有找到键为 America/NewYork 的时区'

因为我把 'America/NewYork' 设置到了 TIME_ZONE,如下所示:

# "settings.py"

TIME_ZONE = 'America/NewYork'

所以,我把 'America/New_York' 设置到 TIME_ZONE,如下所示,这样错误就解决了:

# "settings.py"
                      # ↓ "_" is added
TIME_ZONE = 'America/New_York'
32

根据错误信息:

ValueError: 时区设置不正确:America/New_York EST5EDT SystemV/EST5EDT US/Eastern

看起来在 settings.py 文件中,TIME_ZONE 的值是:America/New_York EST5EDT SystemV/EST5EDT US/Eastern

你只需要写 America/New_York 就可以了。

如果不是这样,检查一下这个文件是否存在:

/usr/share/zoneinfo/America/New_York

如果这个文件不存在,那说明你的系统不支持这个时区。

(有效的时区可以在 /usr/share/zoneinfo/ 这个目录下找到)

撰写回答