복붙노트

[PYTHON] django에서 현지 표준 시간대 가져 오기

PYTHON

django에서 현지 표준 시간대 가져 오기

나는 시스템 시간, UTC에 저장된 mysql DATETIME 값을 가지고있다. 장고에서 현지 시간대로 변환해야합니다. 여기 내가 현재 가지고있는 것입니다 :

# value in mysql
`timestamp`
2013-02-01 22:48:45

# settings.py
TIME_ZONE = 'America/Los_Angeles'

# views.py
last_updated = PathLastUpdated.objects.all()[0].timestamp
print last_updated
2013-02-01 22:48:45 <-- same as UTC

last_updated 값을 내 로컬 시간대 = "America / Los Angeles"에 넣으려면 어떻게해야합니까?

해결법

  1. ==============================

    1.시간대에 대한 장고 문서는 날짜 시간 객체를 표시하기위한 적절한 시간대로 변환하는 데 필요한 모든 세부 사항을 문서화합니다.

    시간대에 대한 장고 문서는 날짜 시간 객체를 표시하기위한 적절한 시간대로 변환하는 데 필요한 모든 세부 사항을 문서화합니다.

    데이터는 UTC로 저장됩니다. 데이터베이스에서 DateTime 필드 개체를 가져올 때 순진한 datetime.datetime 개체가됩니다. 즉, 시간대가 첨부되지 않은 날짜 / 시간. 전환을하는 것은 귀하에게 달려 있습니다.

    웹 응용 프로그램의 사용자가 다른 시간대에있을 수 있으므로 각 요청에 대해 적절한 시간대로 변환해야합니다. 이것이 현재 시간대를 설정하는 활성화 기능이있는 이유입니다.

    pytz를 설치했다면 다음을 수행 할 수 있습니다.

    from django.utils.timezone import activate
    activate(settings.TIME_ZONE)
    

    템플릿 엔진의 날짜 필드를 모두 출력하면 순진한 날짜 시간 개체가 올바른 시간대로 자동 변환되어 표시됩니다.

    표준 시간대를 설정하려는 순진한 datetime.datetime 인스턴스가 하나 뿐인 경우에는 pytz 모듈을 직접 사용하십시오. 그러나 프레젠테이션 시점의 시간대 만 변환하는 것이 좋으므로보기에서이 작업을 수행하는 것이 일반적이 아닙니다.

    from pytz import timezone
    
    settingstime_zone = timezone(settings.TIME_ZONE)
    last_updated = last_updated.astimezone(settings_time_zone)
    
  2. ==============================

    2.많이 울부 짖었을 때, 나는 내 나라가 다음과 같은 일을하는 정확한 날짜를 보여줄 수 있었다.

    많이 울부 짖었을 때, 나는 내 나라가 다음과 같은 일을하는 정확한 날짜를 보여줄 수 있었다.

    >>> from django.utils.timezone import get_current_timezone
    >>> from front.models import Training
    
    >>> tz = get_current_timezone()
    >>> stored_date = Training.objects.first().start_date
    datetime.datetime(2015, 4, 25, 17, 0, tzinfo=<UTC>)
    
    >>> desired_date = stored_date + tz.utcoffset(stored_date)
    datetime.datetime(2015, 4, 25, 14, 0, tzinfo=<UTC>)
    

    tzinfo 속성은 utc를 보여 주지만 표시 할 날짜와 시간이 정확합니다.

    2015 년 30 월 30 일 업데이트 (Django 1.8)

    오늘은 또 다른 접근 방식을 사용하고 있습니다. 장고 친화적입니다.

    >>> from django.utils import timezone
    >>> from trainings.models import Training
    >>> value = Training.objects.first().date
    
    >>> value
    datetime.datetime(2015, 10, 23, 11, 32, 54, 633151, tzinfo=<UTC>)
    
    >>> timezone.localtime(value)
    datetime.datetime(2015, 10, 23, 9, 32, 54, 633151, tzinfo=<django.utils.timezone.LocalTimezone object at 0x7fa6129784a8>)
    
  3. ==============================

    3.localtime은 템플릿 필터이므로 도움이 될 수 있습니다.

    localtime은 템플릿 필터이므로 도움이 될 수 있습니다.

    https://github.com/django/django/blob/1.8.4/django/utils/timezone.py#L298

    코드 샘플 :

    from django.utils.timezone import localtime 
    
    desired_datetime = localtime(stored_datetime)
    
  4. ==============================

    4.나는이 모든 것을 다룰 수있는 간단한 미들웨어를 만들었습니다.

    나는이 모든 것을 다룰 수있는 간단한 미들웨어를 만들었습니다.

    https://github.com/Miserlou/django-easy-timezones

    간단히 설치하고 지침을 따르십시오.

  5. ==============================

    5.개인적으로 UTC가 아닌 TIME_ZONE 설정을 사용하는 것에 대한 조언을드립니다. 과거에 Django 백엔드가 사용하던 데이터베이스와는 다른 시간대 (다른 시간대의 값 저장)에서 데이터베이스가 작동하고 있었는지에 관해서도 문제가있었습니다. 그것은 시간을 비교하고, 당신이하고있는 일에 따라 앞뒤로 바꾸는 많은 번거 로움을 의미했습니다.

    개인적으로 UTC가 아닌 TIME_ZONE 설정을 사용하는 것에 대한 조언을드립니다. 과거에 Django 백엔드가 사용하던 데이터베이스와는 다른 시간대 (다른 시간대의 값 저장)에서 데이터베이스가 작동하고 있었는지에 관해서도 문제가있었습니다. 그것은 시간을 비교하고, 당신이하고있는 일에 따라 앞뒤로 바꾸는 많은 번거 로움을 의미했습니다.

    일반적으로 백엔드에서 하나의 표준 시간대 (UTC)를 사용하고 프론트 엔드의 시간을 사용자가 제공하는 사용자 시간대로 변환하는 것이 좋습니다.

  6. ==============================

    6.나는 똑같은 문제에 봉착했다. 내 설정에서 TIME_ZONE을 설정했지만 MySql의 시간은 여전히 ​​UTC 시간입니다.

    나는 똑같은 문제에 봉착했다. 내 설정에서 TIME_ZONE을 설정했지만 MySql의 시간은 여전히 ​​UTC 시간입니다.

    # settings.py
    TIME_ZONE = 'Asia/Shanghai'
    

    그러면 settings.py에서 USE_TZ를 False로 설정해야합니다.

    USE_TZ = False

  7. ==============================

    7.그냥 사용하십시오.

    그냥 사용하십시오.

    timezone.localtime(arg)
    
  8. ==============================

    8.이걸 찾으려면 시간이 좀 걸렸지 만, 어떻게 해결 했는가. 나는 IP 주소에서 사용자의 시간대를 추측하고 Django 2 이상에서이 작업을 수행합니다.

    이걸 찾으려면 시간이 좀 걸렸지 만, 어떻게 해결 했는가. 나는 IP 주소에서 사용자의 시간대를 추측하고 Django 2 이상에서이 작업을 수행합니다.

    {% load tz %}
    {% timezone "Europe/Paris" %}
        Paris time: {{ object.date }}
    {% endtimezone %}
    
  9. from https://stackoverflow.com/questions/14657173/get-local-timezone-in-django by cc-by-sa and MIT license