如何在Django中设置时区

在django项目的settings.py文件中,我有这样一行:

TIME_ZONE = 'UTC'

但我想让我的应用程序在UTC+2时区运行,所以我把它改成了

TIME_ZONE = 'UTC+2'

它给出了错误ValueError: Incorrect timezone setting: UTC+2。正确的做法是什么?

谢谢!

246483 次浏览

以下是有效的时区列表:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones < a href = " http://en.wikipedia.org/wiki/List_of_tz_database_time_zones " > < / >

你可以使用

TIME_ZONE = 'Europe/Istanbul'

UTC + 02:00

tzinfo数据库中选择一个有效的时区。它们倾向于采用例如Africa/GaborneUS/Eastern的形式

找到与你最近的城市匹配的那个,或者与你的时区匹配的那个,然后设置你的TIME_ZONE值来匹配。

要从tz数据库中获得所有有效时区名称(id)的集合,可以使用使用Python中的pytz模块:

>>> 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'
  1. 将TIME_ZONE更改为您的本地时区,并在'setting.py'中保留USE_TZ为True:

    TIME_ZONE = '亚洲/上海'

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. 这将写入并存储datetime对象为UTC到后端数据库。

  3. 然后使用模板标签转换前端模板中的UTC时间,如下所示:

                <td>
    {% load tz %}
    {% get_current_timezone as tz %}
    {% timezone tz %}
    \{\{ message.log_date | time:'H:i:s' }}
    {% endtimezone %}
    </td>
    

or use the template filters concisely:

                <td>
{% load tz %}
\{\{ message.log_date | localtime | time:'H:i:s' }}
</td>
  1. 你可以在官方文档中查看更多细节:默认时区和当前时区

    当支持时区时,Django在数据库中存储UTC格式的datetime信息,在内部使用时区感知的datetime对象,并在模板和表单中将它们转换为最终用户的时区

有效的timeZone值基于Linux和其他Unix系统使用的tz (timeZone)数据库。这些值是“区域/位置”形式的字符串(xsd:string),其中:

区域是一个大陆或海洋的名称。目前区域包括:

  • 非洲
  • 美国(包括北美和南美)
  • 南极洲
  • 北极
  • 亚洲
  • 大西洋
  • 澳大利亚
  • 欧洲
  • Etc(行政区域。例如,“Etc/UTC”表示 协调世界时)
  • 印度
  • 太平洋

位置是城市、岛屿或其他地区的名称。

区域名称和输出缩写遵循POSIX(可移植操作系统接口)UNIX约定,它在格林威治以西使用正号(+),在格林威治以东使用负号(-),这与通常预期的相反。例如,“Etc/GMT+4”对应于UTC(格林威治以西)后4小时(而不是UTC(协调世界时)前4小时(格林威治以东)。

这是所有有效时区的列表

您可以在settings.py中更改时区,如下所示

LANGUAGE_CODE = 'en-us'


TIME_ZONE = 'Asia/Kolkata'


USE_I18N = True


USE_L10N = True


USE_TZ = True

基于Django的TZ名字支持的通用解决方案:

UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'

+/-被有意切换。

  1. 下载最新的pytz文件(pytz-2019.3.tar.gz)

    https://pypi.org/simple/pytz/
    
  2. copy and extract it to site_packages directory on yor project

  3. in cmd go to the extracted folder and run:

    python setup.py install
    
  4. TIME_ZONE = 'Etc/GMT+2' or country name

正确使用区域/位置格式。 例子:< / p >
TIME_ZONE = 'Asia/Kolkata'
这对我来说很好(我仍然在本地测试应用程序)。 在settings.py中文件类型:

. txt
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 < / p >

添加Preferred TIME_ZONE并设置USE_TZ为False,如下所示

  • TIME_ZONE = '亚洲/加尔各答'
  • USE_TZ = False

希望它能起作用。

以下是有效的时区列表:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

你可以使用达卡的时区

TIME_ZONE = 'Asia/Dhaka'

UTC+06:00(达卡或阿斯塔纳)