복붙노트

[PYTHON] datetime 객체가 pytz로 지역화되었는지 확인하는 방법은 무엇입니까?

PYTHON

datetime 객체가 pytz로 지역화되었는지 확인하는 방법은 무엇입니까?

현지화 된 UTC 시간대가있는 datetime 객체를 저장하려고합니다. datetime 객체를 저장하는 메서드에는 현지화되지 않은 datetime (naive) 객체 또는 이미 현지화 된 객체를 지정할 수 있습니다. 현지화가 필요한지 어떻게 결정합니까?

조건이 누락 된 코드 :

class MyClass:
  def set_date(self, d):
    # what do i check here?
    # if(d.tzinfo):
      self.date = d.astimezone(pytz.utc)
    # else:
      self.date = pytz.utc.localize(d)

해결법

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

    1.datetime 문서에서 :

    datetime 문서에서 :

    d가 UTC 시간대로 시간을 나타내는 datetime 객체이면 두 경우 모두 사용할 수 있습니다.

    self.date = d.replace(tzinfo=pytz.utc)
    

    Timezone-aware 또는 naive와 관계없이 작동합니다.

    참고 : datetime.replace () 메서드를 utc 오프셋이 고정되지 않은 시간대와 함께 사용하지 마십시오. UTC 시간대와 함께 사용하는 것이 좋지만 그렇지 않으면 tz.localize () 메서드를 사용해야합니다.

  2. ==============================

    2.datetime 객체 'd'가 지역화되어 있는지 확인하려면 d.tzinfo가 None인지, 지역화가 아닌지 확인하십시오.

    datetime 객체 'd'가 지역화되어 있는지 확인하려면 d.tzinfo가 None인지, 지역화가 아닌지 확인하십시오.

  3. ==============================

    3.타임 스탬프 obj를 utc로 변환하거나 강제 변환하는보다 완벽한 함수가 있습니다. 예외에 도달하면 타임 스탬프가 현지화되지 않았 음을 의미합니다. 코드 내에서 항상 UTC로 작업하는 것이 우수 실행이므로이 함수는 지속성의 엔트리 레벨에서 매우 유용합니다.

    타임 스탬프 obj를 utc로 변환하거나 강제 변환하는보다 완벽한 함수가 있습니다. 예외에 도달하면 타임 스탬프가 현지화되지 않았 음을 의미합니다. 코드 내에서 항상 UTC로 작업하는 것이 우수 실행이므로이 함수는 지속성의 엔트리 레벨에서 매우 유용합니다.

    def convert_or_coerce_timestamp_to_utc(timeobj):
            out = timeobj
            try:
                out = timeobj.astimezone(pytz.utc) # aware object can be in any timezone
            except (ValueError,TypeError) as exc: # naive
                out = timeobj.replace(tzinfo=pytz.utc)
            return out
    

    J.F. Sebastian의 답변에서 'try catch'의 작은 추가는 추가 캐치 조건이며,이 캐리 조건에 의해 모든 순진한 사례가 캐치되지는 않습니다.

  4. ==============================

    4.상위 응답을 마무리하는 함수가 있습니다.

    상위 응답을 마무리하는 함수가 있습니다.

    def tz_aware(dt):
        if dt.tzinfo is None or dt.tzinfo.utcoffset(dt) is None: 
            return False
        elif dt.tzinfo is not None and dt.tzinfo.utcoffset(dt) is not None: 
            return True
    
  5. from https://stackoverflow.com/questions/5802108/how-to-check-if-a-datetime-object-is-localized-with-pytz by cc-by-sa and MIT license