programing

날짜/시간 개체에서 피츠 시간대를 제거하려면 어떻게 해야 합니까?

elecom 2023. 7. 2. 19:02
반응형

날짜/시간 개체에서 피츠 시간대를 제거하려면 어떻게 해야 합니까?

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

>>> 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이 DATTIME 유형의 표준 시간대를 지원하지 않는 경우가 있습니다.따라서 ORM을 sqlalchemy와 같이 사용하면 시간대를 제거할 수 있습니다.datetime.datetime데이터베이스에 삽입할 개체입니다.솔루션은 다음을 변환하는 것입니다.datetime.datetime표준 시간대를 지정할 수 없기 때문에 데이터베이스의 모든 것이 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

언급URL : https://stackoverflow.com/questions/10944047/how-can-i-remove-a-pytz-timezone-from-a-datetime-object

반응형