장고에서 시간대를 설정하는 방법?


139

내 django 프로젝트 settings.py파일에는 다음 줄이 있습니다.

TIME_ZONE = 'UTC'

하지만 UTC + 2 시간대로 앱을 실행하고 싶습니다.

TIME_ZONE = 'UTC+2'

오류가 발생 ValueError: Incorrect timezone setting: UTC+2합니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

감사!

답변:



28

tz 데이터베이스 에서 유효한 모든 시간대 이름 (id) 세트를 얻으려면 Python에서 모듈을 사용할pytz있습니다 .

>>> 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
또한 더 이상 사용되지 않는 시간대를 포함하지 않는 짧은 시간대 목록이 있음을 주목할 가치가 있습니다 pytz.common_timezones.
vmonteco

11

tzinfo 데이터베이스 에서 유효한 시간대를 선택하십시오 . 그들은 예를 들어 형태를 취하는 경향이 있습니다Africa/GaborneUS/Eastern

가장 가까운 도시 또는 시간대가있는 도시를 찾은 다음 일치하는 값을 설정하십시오 TIME_ZONE.


4

유효한 시간대 값은 Linux 및 기타 Unix 시스템에서 사용되는 tz (시간대) 데이터베이스를 기반으로합니다. 값은 " Area / Location 형식의 문자열 (xsd : string)입니다. .

지역 은 대륙 또는 바다 이름입니다. 현재 지역 :

  • 아프리카
  • 아메리카 (북미 및 남미)
  • 남극
  • 북극
  • 아시아
  • 대서양
  • 호주
  • 유럽
  • 기타 (관리 영역. 예를 들어 "Etc / UTC"는 협정 세계시를 나타냅니다.)
  • 인도 사람
  • 태평양

위치 는 도시, 섬 또는 기타 지역 이름입니다.

영역 이름 및 출력 약어는 POSIX (휴대용 운영 체제 인터페이스) UNIX 규칙을 따릅니다.이 규칙은 그리니치 서쪽의 양수 (+) 기호와 그리니치 동쪽의 음수 (-) 기호를 사용합니다. 이는 일반적으로 예상되는 것과 반대입니다. 예를 들어, "Etc / GMT + 4"는 UTC (협정 세계시) (그리니치 동부)보다 4 시간 앞서서 UTC보다 4 시간 (그리니치 서쪽)에 해당합니다.

유효한 모든 시간대 목록은 다음과 같습니다.

다음과 같이 설정에서 시간대를 변경할 수 있습니다.

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

이 질문은 Django 프로젝트의 시간대를 변경하려고합니다. settings.py 파일 영국 .

jfs 솔루션에서 tz 데이터베이스를 사용하여 답을 찾았습니다.

    TIME_ZONE = 'Europe/London'

1
  1. TIME_ZONE을 현지 시간대로 변경하고 'setting.py'에서 USE_TZ를 True로 유지하십시오.

    TIME_ZONE = '아시아 / 상하이'

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. 백엔드 데이터베이스에 datetime 객체를 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

Django의 TZ 이름 지원을 기반으로하는 범용 솔루션 :

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프로젝트의 디렉토리에 복사하여 추출하십시오.

  3. cmd에서 추출 된 폴더로 이동하여 다음을 실행하십시오.

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' 또는 국가 이름

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.