如何在 Django 中设置时区?
How to set the timezone in Django?
在我的 django 项目的 settings.py
文件中,我有这一行:
TIME_ZONE = 'UTC'
但我希望我的应用在 UTC+2 时区 运行,所以我将其更改为
TIME_ZONE = 'UTC+2'
它给出了错误ValueError: Incorrect timezone setting: UTC+2
。正确的做法是什么?
谢谢!
以下是有效时区列表:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
您可以使用
TIME_ZONE = 'Europe/Istanbul'
UTC+02:00
从 tzinfo database 中选择一个有效的时区。他们倾向于采取形式,例如Africa/Gaborne
和 US/Eastern
找到与离您最近的城市相匹配的那个,或者与您的时区相匹配的那个,然后将 TIME_ZONE
的值设置为匹配。
从 the tz database, you could use pytz
module in Python 获取一组所有有效的时区名称 (id):
>>> import pytz # $ pip install pytz
>>> pytz.all_timezones_set
LazySet({'Africa/Abidjan',
'Africa/Accra',
'Africa/Addis_Ababa',
'Africa/Algiers',
'Africa/Asmara',
'Africa/Asmera',
...
'UTC',
'Universal',
'W-SU',
'WET',
'Zulu'})
我发现这个问题是为了将我的 Django 项目的 settings.py
文件中的时区更改为英国。
在 jfs 的解决方案中使用 tz 数据库我找到了答案:
TIME_ZONE = 'Europe/London'
将 TIME_ZONE 更改为您当地的时区,并在 'setting.py' 中将 USE_TZ 保持为 True:
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = 真
USE_L10N = 真
USE_TZ = 真
这会将日期时间对象作为 UTC 写入并存储到后端数据库。
然后使用模板标签在你的前端模板中转换UTC时间:
<td>
{% load tz %}
{% get_current_timezone as tz %}
{% timezone tz %}
{{ message.log_date | time:'H:i:s' }}
{% endtimezone %}
</td>
或简洁地使用模板过滤器:
<td>
{% load tz %}
{{ message.log_date | localtime | time:'H:i:s' }}
</td>
您可以在官方文档中查看更多详细信息:Default time zone and current time zone
启用时区支持后,Django 将 UTC 日期时间信息存储在数据库中,在内部使用时区感知日期时间对象,并在模板和表单中将它们转换为最终用户的时区。
有效的时区值基于 Linux 和其他 Unix 系统使用的 tz(时区)数据库。这些值是格式为“Area/Location”的字符串 (xsd:string),其中:
面积是大陆或海洋名称。区域目前包括:
- 非洲
- 美国(北美和南美)
- 南极洲
- 北极
- 亚洲
- 大西洋
- 澳大利亚
- 欧洲
- 等(行政区域。例如,“Etc/UTC”代表
协调世界时。)
- 印度人
- 太平洋地区
位置 是城市、岛屿或其他区域名称。
区域名称和输出缩写遵循 POSIX(便携式操作系统界面)UNIX 约定,在格林威治以西使用正号 (+),在格林威治以东使用负号 (-),这是与普遍预期相反。例如,“Etc/GMT+4”对应于 UTC 后 4 小时(即格林威治以西),而不是 UTC(协调世界时)前 4 小时(格林威治以东)。
Here is a list all valid timezones
您可以按如下方式更改 settings.py 中的时区
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
通用解决方案,基于 Django 的 TZ name 支持:
UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'
+/-是有意切换的。
从以下位置下载最新的 pytz 文件 (pytz-2019.3.tar.gz):
https://pypi.org/simple/pytz/
将其复制并解压到您项目的 site_packages
目录中
在 cmd 中转到提取的文件夹和 运行:
python setup.py install
TIME_ZONE = 'Etc/GMT+2'
或国家名称
正确使用Area/Location格式。
示例:
TIME_ZONE = 'Asia/Kolkata'
这对我来说效果很好(我仍在本地测试该应用程序)。
在 settings.py
文件类型中:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Beirut'
USE_I18N = True
USE_L10N = True
USE_TZ = False
#使用你自己的TIME_ZONE:
https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568
添加首选 TIME_ZONE 并将 USE_TZ 设置为 False,如下所示
- TIME_ZONE = 'Asia/Kolkata'
- USE_TZ = 假
希望有用。
以下是有效时区列表:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
您可以使用达卡时区
TIME_ZONE = 'Asia/Dhaka'
UTC+06:00(达卡或阿斯塔纳)
在我的 django 项目的 settings.py
文件中,我有这一行:
TIME_ZONE = 'UTC'
但我希望我的应用在 UTC+2 时区 运行,所以我将其更改为
TIME_ZONE = 'UTC+2'
它给出了错误ValueError: Incorrect timezone setting: UTC+2
。正确的做法是什么?
谢谢!
以下是有效时区列表:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
您可以使用
TIME_ZONE = 'Europe/Istanbul'
UTC+02:00
从 tzinfo database 中选择一个有效的时区。他们倾向于采取形式,例如Africa/Gaborne
和 US/Eastern
找到与离您最近的城市相匹配的那个,或者与您的时区相匹配的那个,然后将 TIME_ZONE
的值设置为匹配。
从 the tz database, you could use pytz
module in Python 获取一组所有有效的时区名称 (id):
>>> import pytz # $ pip install pytz
>>> pytz.all_timezones_set
LazySet({'Africa/Abidjan',
'Africa/Accra',
'Africa/Addis_Ababa',
'Africa/Algiers',
'Africa/Asmara',
'Africa/Asmera',
...
'UTC',
'Universal',
'W-SU',
'WET',
'Zulu'})
我发现这个问题是为了将我的 Django 项目的 settings.py
文件中的时区更改为英国。
在 jfs 的解决方案中使用 tz 数据库我找到了答案:
TIME_ZONE = 'Europe/London'
将 TIME_ZONE 更改为您当地的时区,并在 'setting.py' 中将 USE_TZ 保持为 True:
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = 真
USE_L10N = 真
USE_TZ = 真
这会将日期时间对象作为 UTC 写入并存储到后端数据库。
然后使用模板标签在你的前端模板中转换UTC时间:
<td> {% load tz %} {% get_current_timezone as tz %} {% timezone tz %} {{ message.log_date | time:'H:i:s' }} {% endtimezone %} </td>
或简洁地使用模板过滤器:
<td>
{% load tz %}
{{ message.log_date | localtime | time:'H:i:s' }}
</td>
您可以在官方文档中查看更多详细信息:Default time zone and current time zone
启用时区支持后,Django 将 UTC 日期时间信息存储在数据库中,在内部使用时区感知日期时间对象,并在模板和表单中将它们转换为最终用户的时区。
有效的时区值基于 Linux 和其他 Unix 系统使用的 tz(时区)数据库。这些值是格式为“Area/Location”的字符串 (xsd:string),其中:
面积是大陆或海洋名称。区域目前包括:
- 非洲
- 美国(北美和南美)
- 南极洲
- 北极
- 亚洲
- 大西洋
- 澳大利亚
- 欧洲
- 等(行政区域。例如,“Etc/UTC”代表 协调世界时。)
- 印度人
- 太平洋地区
位置 是城市、岛屿或其他区域名称。
区域名称和输出缩写遵循 POSIX(便携式操作系统界面)UNIX 约定,在格林威治以西使用正号 (+),在格林威治以东使用负号 (-),这是与普遍预期相反。例如,“Etc/GMT+4”对应于 UTC 后 4 小时(即格林威治以西),而不是 UTC(协调世界时)前 4 小时(格林威治以东)。
Here is a list all valid timezones
您可以按如下方式更改 settings.py 中的时区
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
通用解决方案,基于 Django 的 TZ name 支持:
UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'
+/-是有意切换的。
从以下位置下载最新的 pytz 文件 (pytz-2019.3.tar.gz):
https://pypi.org/simple/pytz/
将其复制并解压到您项目的
site_packages
目录中在 cmd 中转到提取的文件夹和 运行:
python setup.py install
TIME_ZONE = 'Etc/GMT+2'
或国家名称
正确使用Area/Location格式。 示例:
TIME_ZONE = 'Asia/Kolkata'
这对我来说效果很好(我仍在本地测试该应用程序)。
在 settings.py
文件类型中:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Beirut'
USE_I18N = True
USE_L10N = True
USE_TZ = False
#使用你自己的TIME_ZONE: https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568
添加首选 TIME_ZONE 并将 USE_TZ 设置为 False,如下所示
- TIME_ZONE = 'Asia/Kolkata'
- USE_TZ = 假
希望有用。
以下是有效时区列表:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
您可以使用达卡时区
TIME_ZONE = 'Asia/Dhaka'
UTC+06:00(达卡或阿斯塔纳)