จะตั้งค่าเขตเวลาใน Django ได้อย่างไร?


150

ในsettings.pyไฟล์โครงการ django ของฉันฉันมีบรรทัดนี้:

TIME_ZONE = 'UTC'

แต่ฉันต้องการให้แอปของฉันทำงานในเขตเวลา UTC + 2 ดังนั้นฉันจึงเปลี่ยนเป็น

TIME_ZONE = 'UTC+2'

ValueError: Incorrect timezone setting: UTC+2มันทำให้เกิดข้อผิดพลาด อะไรคือวิธีที่ถูกต้องในการทำเช่นนี้?

ขอบคุณ!

คำตอบ:


241

นี่คือรายการเขตเวลาที่ถูกต้อง:

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

คุณสามารถใช้ได้

TIME_ZONE = 'Europe/Istanbul'

สำหรับ UTC + 02: 00 น


3
จริงๆแล้วนั่นเป็นเพียงครึ่งปีเท่านั้นที่ไม่เปิด DST คุณสามารถใช้ Africa / Mbabane สำหรับ UTC + 2 ได้ตลอดทั้งปี
Chris SH

29

หากต้องการรับชุดชื่อเขตเวลา (ids) ที่ถูกต้องทั้งหมดจากฐานข้อมูล tzคุณสามารถใช้pytzโมดูลใน 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'})

2
pytz.common_timezonesนอกจากนี้ยังเป็นที่น่าสังเกตว่ามีรายการสั้นของเขตไม่รวมถึงคนที่เลิกกับ
vmonteco

11

เลือกเขตเวลาที่ถูกต้องจากฐานข้อมูล tzinfo พวกเขามักจะใช้รูปแบบเช่นAfrica/GaborneและUS/Eastern

ค้นหาเมืองที่ตรงกับเมืองที่ใกล้คุณที่สุดหรือเมืองที่มีเขตเวลาของคุณจากนั้นตั้งค่าของคุณTIME_ZONEให้ตรงกัน


4

ค่า timeZone ที่ถูกต้องขึ้นอยู่กับฐานข้อมูล tz (เขตเวลา) ที่ใช้โดย Linux และระบบ Unix อื่น ๆ ค่าคือสตริง (xsd: string) ในรูปแบบ“ Area / Location ” ซึ่ง:

พื้นที่เป็นชื่อทวีปหรือมหาสมุทร พื้นที่ปัจจุบันประกอบด้วย:

  • แอฟริกา
  • อเมริกา (ทั้งอเมริกาเหนือและอเมริกาใต้)
  • แอนตาร์กติกา
  • อาร์กติก
  • เอเชีย
  • แอตแลนติก
  • ออสเตรเลีย
  • ยุโรป
  • ฯลฯ (เขตการดูแลระบบตัวอย่างเช่น“ Etc / UTC” แทนเวลาสากลเชิงพิกัด)
  • อินเดีย
  • แปซิฟิก

สถานที่คือเมืองเกาะหรือชื่อภูมิภาคอื่น ๆ

ชื่อโซนและตัวย่อเอาต์พุตเป็นไปตามอนุสัญญา UNIX POSIX (อินเทอร์เฟซระบบปฏิบัติการพกพา) ซึ่งใช้เครื่องหมายบวก (+) ทางตะวันตกของกรีนิชและเครื่องหมายลบ (-) ทางตะวันออกของกรีนิชซึ่งตรงข้ามกับสิ่งที่คาดหวังโดยทั่วไป ตัวอย่างเช่น“ Etc / GMT + 4” จะตรงกับ 4 ชั่วโมงหลัง UTC (นั่นคือทางตะวันตกของกรีนิช) แทนที่จะเป็นเวลา UTC (เวลาสากลเชิงพิกัด) มากกว่า 4 ชั่วโมง (ทางตะวันออกของกรีนิช)

นี่คือรายการเขตเวลาที่ถูกต้องทั้งหมด

คุณสามารถเปลี่ยนเขตเวลาได้ใน settings.py ของคุณดังนี้

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

ฉันพบคำถามนี้ที่ต้องการเปลี่ยนเขตเวลาในsettings.pyไฟล์โครงการ Django เป็นสหราชอาณาจักร

การใช้ฐานข้อมูล tz ในโซลูชันของ jfs ฉันพบคำตอบ:

    TIME_ZONE = 'Europe/London'

1
  1. เปลี่ยน TIME_ZONE เป็นเขตเวลาท้องถิ่นของคุณและให้ USE_TZ เป็น True ใน "setting.py":

    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. คุณสามารถตรวจสอบรายละเอียดเพิ่มเติมได้ในเอกสารอย่างเป็นทางการ: เขตเวลาเริ่มต้นและเขตเวลาปัจจุบัน

    เมื่อเปิดใช้งานการสนับสนุนสำหรับโซนเวลา Django จะจัดเก็บข้อมูลวันที่และเวลาใน UTC ในฐานข้อมูลใช้อ็อบเจ็กต์วันที่และเวลาที่ทราบโซนเวลาภายในและแปลเป็นเขตเวลาของผู้ใช้ปลายทางในเทมเพลตและฟอร์ม


1

โซลูชันสากลโดยใช้การสนับสนุนชื่อ 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'

+/- ถูกเปลี่ยนโดยเจตนา


0
  1. ดาวน์โหลดไฟล์ pytz ล่าสุด (pytz-2019.3.tar.gz) จาก:

    https://pypi.org/simple/pytz/
    
  2. คัดลอกและแตกไฟล์ไปยังsite_packagesไดเร็กทอรีบน yor project

  3. ใน cmd ไปที่โฟลเดอร์ที่แยกออกมาแล้วเรียกใช้:

    python setup.py install
    
  4. TIME_ZONE = 'Etc/GMT+2' หรือชื่อประเทศ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.