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
'Nice programing' 카테고리의 다른 글
시스템이 12 시간인지 24 시간인지 어떻게 확인합니까? (0) | 2021.01.06 |
---|---|
/ usr / local / lib에서 공유 라이브러리를 검색합니까? (0) | 2021.01.06 |
Graphviz 하위 그래프가 시각화되지 않습니다. (0) | 2021.01.06 |
스팬의 선 높이가 왜 쓸모가 없습니까? (0) | 2021.01.06 |
Git에서 커밋 ID에 대한 커밋 로그 조회 (0) | 2021.01.06 |