Bagaimana cara menyetel zona waktu di Django?

150

Dalam settings.pyfile proyek django saya , saya memiliki baris ini:

TIME_ZONE = 'UTC'

Tapi saya ingin aplikasi saya berjalan dalam zona waktu UTC + 2, jadi saya mengubahnya menjadi

TIME_ZONE = 'UTC+2'

Ini memberikan kesalahan ValueError: Incorrect timezone setting: UTC+2. Apa cara yang benar untuk melakukan ini?

Terima kasih!

jeff
sumber

Jawaban:

241

Berikut adalah daftar zona waktu yang valid:

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

Kamu bisa memakai

TIME_ZONE = 'Europe/Istanbul'

untuk UTC + 02: 00

Selcuk
sumber
3
Sebenarnya itu baru setengah tahun ketika DST tidak aktif. Anda dapat menggunakan Afrika / Mbabane untuk UTC + 2 sepanjang tahun
Chris SH
29

Untuk mendapatkan satu set semua nama zona waktu (id) yang valid dari database tz , Anda dapat menggunakan pytzmodul dengan 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'})
jfs
sumber
2
Perlu diperhatikan juga bahwa ada daftar zona waktu yang lebih pendek, tidak termasuk yang sudah usang pytz.common_timezones.
vmonteco
11

Pilih zona waktu yang valid dari database tzinfo . Mereka cenderung mengambil bentuk misalnya Africa/GabornedanUS/Eastern

Temukan kota yang cocok dengan kota terdekat Anda, atau kota yang memiliki zona waktu Anda, lalu tetapkan nilai Anda TIME_ZONEuntuk mencocokkan.

Crast
sumber
4

Nilai timeZone yang valid didasarkan pada database tz (zona waktu) yang digunakan oleh Linux dan sistem Unix lainnya. Nilainya adalah string (xsd: string) dalam bentuk " Area / Lokasi ", di mana:

Area adalah nama benua atau samudra. Area saat ini meliputi:

  • Afrika
  • Amerika (Amerika Utara dan Amerika Selatan)
  • Antartika
  • Arktik
  • Asia
  • Atlantik
  • Australia
  • Eropa
  • Dll (zona administratif. Misalnya, "Etc / UTC" mewakili Waktu Universal Terkoordinasi.)
  • Indian
  • Pasifik

Lokasi adalah kota, pulau, atau nama daerah lainnya.

Nama zona dan singkatan keluaran mengikuti konvensi UNIX POSIX (antarmuka sistem operasi portabel), yang menggunakan tanda positif (+) di sebelah barat Greenwich dan tanda negatif (-) di sebelah timur Greenwich, yang merupakan kebalikan dari apa yang diharapkan secara umum. Misalnya, "Dll ​​/ GMT + 4" sesuai dengan 4 jam di belakang UTC (yaitu, sebelah barat Greenwich) bukan 4 jam lebih awal dari UTC (Waktu Universal Terkoordinasi) (timur Greenwich).

Berikut adalah daftar semua zona waktu yang valid

Anda dapat mengubah zona waktu di settings.py Anda sebagai berikut

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True
ANFAS PV
sumber
2

Saya menemukan pertanyaan ini mencari untuk mengubah zona waktu dalam settings.pyberkas proyek Django saya ke Inggris.

Menggunakan database tz dalam solusi jfs saya menemukan jawabannya:

    TIME_ZONE = 'Europe/London'
Menandai
sumber
1
  1. Ubah TIME_ZONE ke zona waktu lokal Anda, dan pertahankan USE_TZ sebagai True di 'setting.py':

    TIME_ZONE = 'Asia / Shanghai'

    USE_I18N = Benar

    USE_L10N = Benar

    USE_TZ = Benar

  2. Ini akan menulis dan menyimpan objek datetime sebagai UTC ke database backend.

  3. Kemudian gunakan tag template untuk mengonversi waktu UTC di template frontend Anda seperti:

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

atau gunakan filter template secara singkat:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Anda dapat memeriksa lebih detail di dokumen resmi: Zona waktu default dan zona waktu saat ini

    Ketika dukungan untuk zona waktu diaktifkan, Django menyimpan informasi datetime dalam UTC dalam database, menggunakan objek datetime sadar-zona secara internal, dan menerjemahkannya ke zona waktu pengguna akhir dalam templat dan formulir.

Freman Zhang
sumber
1

Solusi universal, berdasarkan pada dukungan nama TZ Django :

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

+/- sengaja dialihkan.

Punnerud
sumber
0
  1. unduh file pytz terbaru (pytz-2019.3.tar.gz) dari:

    https://pypi.org/simple/pytz/
    
  2. salin dan ekstrak ke site_packagesdirektori di proyek Anda

  3. di cmd, buka folder yang diekstrak dan jalankan:

    python setup.py install
    
  4. TIME_ZONE = 'Etc/GMT+2' atau nama negara

S.Rasool Mirtalebi
sumber