bir datetime nesneden bir zaman dilimini (tzinfo) kaldırmak için Bir ok nesnesini bir datetime nesnesine dönüştürmek, ardından yukarıdaki örnekle aynı şeyi yapmak.
# <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)
Bunu neden yaptınız? Bir örnek, mysql'nin DATETIME türüyle saat dilimlerini desteklememesidir. Bu nedenle, ORM'nin sqlabchemy gibi kullanarak veritabanına eklemek için datetime.datetime
nesnesini verdiğinizde zaman dilimini kaldırabilirsiniz. Çözüm, datetime.datetime
nesnesini UTC'ye dönüştürmektir (bu nedenle zaman dilimi belirtilemediği için veritabanınızdaki her şey UTC'dir), ya veritabanına (zaten saat diliminin kaldırıldığı yer) veya kendiniz kaldırın. Ayrıca, 'un numaralı telefonunun, saat diliminin farkında olduğu ve başka bir zaman dilimi naif olduğu datetime.datetime
nesnelerini kullanamayacağınızı unutmayın.
##############################################################################
# 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