【问题标题】:How to set the timezone in Django?如何在 Django 中设置时区?
【发布时间】:2015-06-01 09:51:53
【问题描述】:

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

TIME_ZONE = 'UTC'

但我希望我的应用程序在 UTC+2 时区运行,所以我将其更改为

TIME_ZONE = 'UTC+2'

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

谢谢!

【问题讨论】:

    标签: python python-3.x django timezone utc


    【解决方案1】:

    以下是有效时区列表:

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

    你可以使用

    TIME_ZONE = 'Europe/Istanbul'
    

    对于 UTC+02:00

    【讨论】:

    • 其实这只是不开夏令时的一半。您可以在 UTC+2 全年使用 Africa/Mbabane
    【解决方案2】:

    要从the tz database 获取一组所有有效的时区名称(id),您可以use pytz module in Python

    >>> 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'})
    

    【讨论】:

    • 另外值得注意的是,有一个较短的时区列表,不包括带有pytz.common_timezones 的已弃用时区。
    【解决方案3】:

    tzinfo database 中选择一个有效的时区。他们倾向于采取以下形式,例如Africa/GaborneUS/Eastern

    找到与您最近的城市或与您的时区匹配的城市,然后将TIME_ZONE 的值设置为匹配。

    【讨论】:

      【解决方案4】:

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

      Area 是大陆或海洋的名称。目前包括:

      • 非洲
      • 美国(北美和南美)
      • 南极洲
      • 北极
      • 亚洲
      • 大西洋
      • 澳大利亚
      • 欧洲
      • Etc(行政区。例如“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
      

      【讨论】:

      • 我在亚洲/达卡,我所有的时间都比当前时间晚了 6 小时......我该怎么做才能解决这个问题
      【解决方案5】:

      通用解决方案,基于 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'
      

      +/- 是有意切换的。

      【讨论】:

        【解决方案6】:

        这对我来说很好用(我仍在本地测试应用程序)。 在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

        【讨论】:

          【解决方案7】:
          1. 将 TIME_ZONE 更改为您当地的时区,并在 'setting.py' 中保持 USE_TZ 为 True:

            TIME_ZONE = '亚洲/上海'

            USE_I18N = 真

            USE_L10N = 真

            USE_TZ = 真

          2. 这会将日期时间对象作为 UTC 写入并存储到后端数据库。

          3. 然后使用 模板标签 转换前端模板中的 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>
          
          1. 您可以在官方文档中查看更多详细信息:Default time zone and current time zone

            启用时区支持后,Django 以 UTC 格式将日期时间信息存储在数据库中,在内部使用可识别时区的日期时间对象,并在模板和表单中将它们转换为最终用户的时区。

          【讨论】:

            【解决方案8】:

            我发现这个问题希望将我的 Django 项目的 settings.py 文件中的时区更改为英国。

            在 jfs 的解决方案中使用 tz 数据库我找到了答案:

                TIME_ZONE = 'Europe/London'
            

            【讨论】:

              【解决方案9】:
              1. 从以下位置下载最新的 pytz 文件 (pytz-2019.3.tar.gz):

                https://pypi.org/simple/pytz/
                
              2. 复制并解压到你项目的site_packages目录

              3. 在cmd中进入解压的文件夹并运行:

                python setup.py install
                
              4. TIME_ZONE = 'Etc/GMT+2' 或国家/地区名称

              【讨论】:

                【解决方案10】:

                正确使用区域/位置格式。 示例:

                TIME_ZONE = 'Asia/Kolkata'
                

                【讨论】:

                  【解决方案11】:

                  以下是有效时区列表:

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

                  您可以使用达卡的时区

                  TIME_ZONE = 'Asia/Dhaka'
                  

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

                  【讨论】:

                    【解决方案12】:

                    添加首选 TIME_ZONE 并将 USE_TZ 设置为 False,如下所示

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

                    希望它会起作用。

                    【讨论】:

                      猜你喜欢
                      • 2020-07-23
                      • 1970-01-01
                      • 2018-07-21
                      • 1970-01-01
                      • 2015-11-25
                      • 1970-01-01
                      • 2014-11-21
                      • 2014-11-16
                      • 2019-10-19
                      相关资源
                      最近更新 更多