Django'da saat dilimi nasıl ayarlanır?


139

Django projemin settings.pydosyasında, bu satır var:

TIME_ZONE = 'UTC'

Ancak uygulamamın UTC + 2 saat diliminde çalışmasını istiyorum.

TIME_ZONE = 'UTC+2'

Hata veriyor ValueError: Incorrect timezone setting: UTC+2. Bunu yapmanın doğru yolu nedir?

Teşekkürler!

Yanıtlar:



28

Tüm geçerli bir saat dilimi adlarına (kimlikleri) bir dizi almak için tz veritabanı , sen verebilir kullanmak pytzPython modülü :

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

1
Ayrıca, kullanımdan kaldırılanları da içermeyen daha kısa bir saat dilimi listesi olduğunu belirtmek gerekir pytz.common_timezones.
19'da vmonteco

11

Tzinfo veritabanından geçerli bir saat dilimi seçin . Onlar formu örneğin almak eğilimindedir Africa/GaborneveUS/Eastern

Size en yakın şehri veya saat dilimine sahip olanı bulun, ardından değerinizi TIME_ZONEeşleşecek şekilde ayarlayın.


4

Geçerli saat dilimi değerleri, Linux ve diğer Unix sistemleri tarafından kullanılan tz (saat dilimi) veritabanını temel alır. Şeklinde “: Değerler dizeleri (string xsd) olan Alan / Konum ,” içinde:

Alan bir kıta veya okyanus adıdır. Alan şu anda şunları içerir:

  • Afrika
  • Amerika (Kuzey Amerika ve Güney Amerika)
  • Antarktika
  • Arktik
  • Asya
  • Atlantik
  • Avustralya
  • Avrupa
  • Vb (yönetim bölgesi. Örneğin, “Vb / UTC” Eşgüdümlü Evrensel Saati temsil eder.)
  • Hintli
  • Pasifik

Konum şehir, ada veya diğer bölgesel addır.

Bölge adları ve çıktı kısaltmaları, Greenwich'in batısında pozitif (+) işaretler ve Greenwich'in doğusunda (genellikle) beklenenin tersi olan negatif (-) işaretler kullanan POSIX (taşınabilir işletim sistemi arabirimi) UNIX kurallarına uyar. Örneğin, “Etc / GMT + 4”, UTC'den (Coordated Universal Time) (Greenwich'in doğusundan) 4 saat öncesinden ziyade UTC'nin (Greenwich'in batısında) 4 saat gerisine karşılık gelir.

İşte tüm geçerli zaman dilimlerinin listesi

Saat dilimini ayarlarınızda aşağıdaki gibi değiştirebilirsiniz.

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

Bu soruyu Django projemin saat dilimini değiştirmek için buldum settings.py dosyasındaki İngiltere'ye .

Jfs çözümünde tz veritabanı kullanarak cevabı buldum:

    TIME_ZONE = 'Europe/London'

1
  1. TIME_ZONE ürününü yerel saat diliminize değiştirin ve 'setting.py'de USE_TZ öğesini True olarak saklayın:

    TIME_ZONE = 'Asya / Şangay'

    USE_I18N = Doğru

    USE_L10N = Doğru

    USE_TZ = Doğru

  2. Bu datetime nesnesini arka uç veritabanına UTC olarak yazar ve saklar .

  3. Ardından , ön uç şablonunuzdaki UTC saatini şu şekilde dönüştürmek için şablon etiketini kullanın:

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

veya şablon filtreleri kısaca kullanın :

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Resmi dokümanda daha fazla ayrıntı kontrol edebilirsiniz: Varsayılan saat dilimi ve geçerli saat dilimi

    Zaman dilimleri için destek etkinleştirildiğinde, Django datetime bilgilerini UTC'de veritabanında depolar, zaman dilimine duyarlı datetime nesnelerini dahili olarak kullanır ve bunları şablonlarda ve formlarda son kullanıcının saat dilimine çevirir.


1

Django'nun TZ ad desteğine dayanan evrensel çözüm :

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

+/- kasıtlı olarak değiştirilir.


0
  1. en son pytz dosyasını indirin (pytz-2019.3.tar.gz):

    https://pypi.org/simple/pytz/
  2. kopyala ve site_packagesprojede dizine çıkar

  3. cmd'de ayıklanan klasöre gidin ve çalıştırın:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' veya ülke adı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.