Mongo ObjectID:“无法比较offset-naive和offset-aware datetimes”,即使是pytz也是如此

时间:2012-10-19 06:29:53

标签: python mongodb datetime timezone pymongo

我正试图用py-pretty美化ObjectIDs时间戳,但它一直给我一个TypeError:

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

即使我尝试使用Pytz将时间戳转换为不知道的UTC日期时区。这是我正在尝试的代码

import datetime
import pytz
import pretty
# ...

song = db.songs.find_one( { 'GUID' : 0123 } )
dateTimeUnaware = song['_id'].generation_time.now(pytz.utc)
prettyDate = pretty.date( dateTimeUnaware )

为什么这会一直给我类型错误? pytz函数不应该使它与时区无关吗?

1 个答案:

答案 0 :(得分:18)

我不是专家,但您的代码不会将时区感知日期转换为时区未知日期。

它只需要在utc时区中使用当前日期(使用now)(因此可以识别时区)。

您可以使用以下方法将tz感知日期时间天真地转换为tz-unaware one:

your_datetime_var.replace(tzinfo=None)

在你的情况下:

song['_id'].generation_time.replace(tzinfo=None)

请注意,在这种情况下,“天真地”意味着与日期和时间相关的所有字段都将具有与原始字段相同的值,但有关时区和夏令时的信息将丢失。

顺便说一下,看起来py-pretty是不受维护的(2010年最后上传到pypi,源代码无法访问)所以寻找替代品可能是个好主意