Làm cách nào để đặt múi giờ trong Django?


136

Trong settings.pytệp dự án django của tôi, tôi có dòng này:

TIME_ZONE = 'UTC'

Nhưng tôi muốn ứng dụng của mình chạy trong múi giờ UTC + 2, vì vậy tôi đã đổi nó thành

TIME_ZONE = 'UTC+2'

Nó đưa ra lỗi ValueError: Incorrect timezone setting: UTC+2. Cách chính xác để làm điều này là gì?

Cảm ơn!

Câu trả lời:



27

Để có được một tập hợp tất cả các tên múi giờ hợp lệ (id) từ cơ sở dữ liệu tz , bạn có thể sử dụng pytzmô-đun trong 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'})

1
Cũng đáng lưu ý rằng có một danh sách múi giờ ngắn hơn, không bao gồm những cái không dùng nữa pytz.common_timezones.
vmonteco

11

Chọn múi giờ hợp lệ từ cơ sở dữ liệu tzinfo . Họ có xu hướng hình thức ví dụ Africa/GaborneUS/Eastern

Tìm thành phố phù hợp với thành phố gần bạn nhất hoặc thành phố có múi giờ của bạn, sau đó đặt giá trị của bạn TIME_ZONEđể khớp.


4

Các giá trị timeZone hợp lệ dựa trên cơ sở dữ liệu tz (múi giờ) được sử dụng bởi Linux và các hệ thống Unix khác. Các giá trị là các chuỗi (xsd: chuỗi) ở dạng Khu vực / Vị trí , trong đó:

Khu vực là một tên lục địa hoặc đại dương. Khu vực hiện tại bao gồm:

  • Châu phi
  • Mỹ (cả Bắc Mỹ và Nam Mỹ)
  • Nam Cực
  • Bắc cực
  • Châu Á
  • Đại Tây Dương
  • Châu Úc
  • Châu Âu
  • Etc (khu vực hành chính. Ví dụ: Et Et / UTC trực tiếp đại diện cho Giờ phối hợp quốc tế.)
  • người Ấn Độ
  • Thái Bình Dương

Vị trí là thành phố, đảo hoặc tên khu vực khác.

Tên khu vực và chữ viết tắt đầu ra tuân theo các quy ước UNIXIX (giao diện hệ điều hành di động), sử dụng các dấu dương (+) ở phía tây Greenwich và các dấu âm (-) ở phía đông Greenwich, trái ngược với những gì thường được mong đợi. Ví dụ: Vv Etc / GMT + 4, tương ứng với 4 giờ sau UTC (nghĩa là phía tây Greenwich) thay vì 4 giờ trước UTC (Giờ phối hợp quốc tế) (phía đông Greenwich).

Dưới đây là danh sách tất cả các múi giờ hợp lệ

Bạn có thể thay đổi múi giờ trong cài đặt của bạn như sau

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

Tôi thấy câu hỏi này đang tìm cách thay đổi múi giờ trong settings.pytệp dự án Django của tôi sang Vương quốc Anh.

Sử dụng cơ sở dữ liệu tz trong giải pháp của jfs tôi đã tìm thấy câu trả lời:

    TIME_ZONE = 'Europe/London'

1
  1. Thay đổi TIME_ZONE thành múi giờ địa phương của bạn và giữ USE_TZ là True trong 'settings.py':

    TIME_ZONE = 'Châu Á / Thượng Hải'

    USE_I18N = Đúng

    USE_L10N = Đúng

    USE_TZ = Đúng

  2. Điều này sẽ viết và lưu trữ đối tượng datetime dưới dạng UTC vào cơ sở dữ liệu phụ trợ.

  3. Sau đó, sử dụng thẻ mẫu để chuyển đổi thời gian UTC trong mẫu lối vào của bạn như sau:

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

hoặc sử dụng chính xác các bộ lọc mẫu :

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Bạn có thể kiểm tra thêm chi tiết trong tài liệu chính thức: Múi giờ mặc định và múi giờ hiện tại

    Khi hỗ trợ cho các múi giờ được bật, Django lưu trữ thông tin về thời gian trong UTC trong cơ sở dữ liệu, sử dụng các đối tượng thời gian nhận biết theo múi giờ bên trong và dịch chúng sang múi giờ của người dùng cuối trong các mẫu và biểu mẫu.


1

Giải pháp phổ quát, dựa trên hỗ trợ tên TZ của 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'

+/- là cố ý chuyển.


0
  1. tải xuống tệp pytz mới nhất (pytz-2019.3.tar.gz) từ:

    https://pypi.org/simple/pytz/
  2. sao chép và giải nén nó vào site_packagesthư mục trên dự án yor

  3. trong cmd vào thư mục giải nén và chạy:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' hoặc tên quốc gia

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.