aware에 해당하는 글 1

TypeError: can't compare offset-naive and offset-aware datetimes

반응형

파이썬 프로그램에서 날자값을 비교하다보면 자주 접하는 오류가 

TypeError: can't compare offset-naive and offset-aware datetimes 인것 같습니다.

 

Error Code:

last_time = pd.to_datetime(self.chart_data[stockCode][-1:].time[0])
now = datetime.now()

if self.prev_time == last_time or self.prev_time >= last_time: # TypeError 발생부분
return

해결방법은 다음과 같습니다.

 

원인: 파이썬에서는 기본적으로 datetime 오브젝트는 aware가 아닌 "naive" 타입입니다.

        그래서, 비교 하려는 두 값 모두 같은 type의 오브젝트 여야 합니다.

 

Sampe Code:

import datetime
import pytz utc=pytz.UTC

challenge.datetime_start = utc.localize(challenge.datetime_start)

challenge.datetime_end = utc.localize(challenge.datetime_end)

# 이제 두개의 datetime 오브젝트는 모두 aware 타입이 되었으므로 비교가 가능합니다.

헷갈리시면, 다음과 같이 사용하셔도 됩니다.

start_time = challenge.datetime_start.replace(tzinfo=utc)
end_time = challenge.datetime_end.replace(tzinfo=utc)

 

참고로, datetime.timezone에 대해서 알아볼께요.

UTC를 기준으로 시간이 빠르면 +시차, 시간이 느리면 -시차로 표시합니다.

시간대나라코드

UTC-5 미국(동부) EST
UTC 영국 GMT
UTC+8 대만 TW
UTC+9 대한민국 KST
UTC+9 일본 JST
UTC+10 오스트레일리아(동부) AEST
  • 나라별 시간대 차이에 대한 더 자세한 내용은 여기를 참고해주세요.

 

참조사이트:

stackoverflow.com/questions/15307623/cant-compare-naive-and-aware-datetime-now-challenge-datetime-end

 

Can't compare naive and aware datetime.now() <= challenge.datetime_end

I am trying to compare the current date and time with dates and times specified in models using comparison operators: if challenge.datetime_start <= datetime.now() <= challenge.datetime_end:...

stackoverflow.com

spoqa.github.io/2019/02/15/python-timezone.html

 

파이썬의 시간대에 대해 알아보기(datetime.timezone)

파이썬의 시간대에 대해서 알아봅니다.

spoqa.github.io

 

반응형

댓글()