본문 바로가기
파이썬

파이썬 datetime 객체에서 pytz 시간대를 제거하려면 어떻게해야합니까?

by º기록 2021. 2. 14.
반응형

pytz datetime 객체에서 시간대를 제거하는 간단한 방법이 있습니까?
예 : 이 예에서 dt_tz 에서 dt 를 재구성합니다.

>>> import datetime
>>> import pytz
>>> dt = datetime.datetime.now()
>>> dt
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000)
>>> dt_tz = pytz.utc.localize(dt)
>>> dt_tz
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>)

 

해결 방법

 

datetime 객체에서 시간대 (tzinfo)를 제거하려면 :

# dt_tz is a datetime.datetime object
dt = dt_tz.replace(tzinfo=None)


# <Arrow [2014-10-09T10:56:09.347444-07:00]>
arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444, tzinfo=tzoffset(None, -25200))
tmpDatetime = arrowObj.datetime

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444)
tmpDatetime = tmpDatetime.replace(tzinfo=None)

왜 이렇게 하시겠습니까? 한 가지 예는 mysql이 DATETIME 유형의 시간대를 지원하지 않는다는 것입니다. 따라서 sqlalchemy와 같은 ORM을 사용하면 데이터베이스에 삽입 할 datetime.datetime 개체를 제공 할 때 단순히 시간대가 제거됩니다. 해결책은 datetime.datetime 객체를 UTC로 변환하는 것입니다 (시간대를 지정할 수 없기 때문에 데이터베이스의 모든 것이 UTC가 됨). 또는 직접 제거하십시오. 또한 하나는 시간대를 인식하고 다른 하나는 표준 시간대를 인식하는 datetime.datetime 객체를 비교할 수 없습니다 .

##############################################################################
# MySQL example! where MySQL doesn't support timezones with its DATETIME type!
##############################################################################

arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

arrowDt = arrowObj.to("utc").datetime

# inserts datetime.datetime(2014, 10, 9, 17, 56, 9, 347444, tzinfo=tzutc())
insertIntoMysqlDatabase(arrowDt)

# returns datetime.datetime(2014, 10, 9, 17, 56, 9, 347444)
dbDatetimeNoTz = getFromMysqlDatabase()

# cannot compare timzeone aware and timezone naive
dbDatetimeNoTz == arrowDt # False, or TypeError on python versions before 3.3

# compare datetimes that are both aware or both naive work however
dbDatetimeNoTz == arrowDt.replace(tzinfo=None) # True

 

참조 페이지 https://stackoverflow.com/questions/10944047

 

 

반응형

댓글