Nice programing

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

nicepro 2021. 1. 6. 20:47
반응형

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


현지화 된 UTC 시간대로 datetime 객체를 저장하고 싶습니다. datetime 개체를 저장하는 메서드에는 지역화되지 않은 datetime (순진한) 개체 또는 이미 지역화 된 개체가 제공 될 수 있습니다. 현지화가 필요한지 어떻게 확인합니까?

if 조건이 누락 된 코드 :

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)

현지화가 필요한지 어떻게 확인합니까?

에서 datetime문서 :

  • datetime 객체 d는 다음과 같은 경우 인식합니다.

    d.tzinfo is not None and d.tzinfo.utcoffset(d) is not None
    
  • d 순진하다.

    d.tzinfo is None or d.tzinfo.utcoffset(d) is None
    

경우 비록 d다음 두 경우 모두에서 사용할 수있는 UTC 시간대의 시간을 나타내는 날짜 객체는 다음과 같습니다

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

d시간대를 인식하거나 순진한 관계없이 작동합니다 .

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


datetime 객체 'd'가 지역화되었는지 확인하려면 d.tzinfo를 확인하고, None이면 지역화 없음을 확인합니다.


다음은 상위 답변을 마무리하는 함수입니다.

def tz_aware(dt):
    return dt.tzinfo is not None and dt.tzinfo.utcoffset(dt) is not None

다음은 타임 스탬프 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

JF Sebastian의 답변에서 'try catch'에서 작은 추가 사항은 추가 catch 조건입니다.이 조건이 없으면 모든 순진한 경우가 함수에 의해 포착되지 않습니다.

참조 URL : https://stackoverflow.com/questions/5802108/how-to-check-if-a-datetime-object-is-localized-with-pytz

반응형