Để xóa múi giờ (tzinfo) khỏi đối tượng datetime:
# dt_tz is a datetime.datetime object
dt = dt_tz.replace(tzinfo=None)
Nếu bạn đang sử dụng một thư viện như mũi tên , thì bạn có thể loại bỏ múi giờ bằng cách chuyển đổi một đối tượng mũi tên thành đối tượng datetime, sau đó thực hiện tương tự như ví dụ trên.
# <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)
Tại sao bạn sẽ làm điều này? Một ví dụ là mysql không hỗ trợ múi giờ với loại DATETIME. Vì vậy, sử dụng ORM như sqlalchemy sẽ đơn giản loại bỏ múi giờ khi bạn cung cấp cho nó một datetime.datetime
đối tượng để chèn vào cơ sở dữ liệu. Giải pháp là chuyển đổi datetime.datetime
đối tượng của bạn thành UTC (vì vậy mọi thứ trong cơ sở dữ liệu của bạn là UTC vì nó không thể chỉ định múi giờ), sau đó chèn nó vào cơ sở dữ liệu (dù sao múi giờ cũng bị xóa) hoặc tự xóa nó. Cũng lưu ý rằng bạn không thể so sánh datetime.datetime
các đối tượng trong đó một đối tượng nhận biết múi giờ và đối tượng khác là múi giờ ngây thơ.
##############################################################################
# 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