Mongo ObjectID:即使使用 pytz,“也无法比较原始偏移量和可感知偏移量的日期时间”

Posted

技术标签:

【中文标题】Mongo ObjectID:即使使用 pytz,“也无法比较原始偏移量和可感知偏移量的日期时间”【英文标题】:Mongo ObjectID: "can't compare offset-naive and offset-aware datetimes" even with pytz 【发布时间】:2012-10-09 17:34:49 【问题描述】:

我正在尝试使用 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 函数不应该使其与时区无关吗?

【问题讨论】:

你所拥有的是一个时区感知的日期时间,它不是不可知的......拥有 pytz.utc 给它一个 utc 的时区。删除它应该可以解决您的问题dateTimeUnaware = song['_id'].generation_time.now() 【参考方案1】:

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

它只采用 utc 时区中的当前日期(使用 now)(因此时区感知)。

您可以通过以下方式天真地将 tz-aware 日期时间转换为 tz-unware 日期时间:

your_datetime_var.replace(tzinfo=None)

在你的情况下:

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

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

顺便说一句,看起来 py-pretty 没有维护(上次上传到 pypi 是在 2010 年,源代码无法访问)所以寻找替代品可能是个好主意

【讨论】:

以上是关于Mongo ObjectID:即使使用 pytz,“也无法比较原始偏移量和可感知偏移量的日期时间”的主要内容,如果未能解决你的问题,请参考以下文章

即使存在,Mongo也不返回文件

BSON::ObjectId 与 Mongo::ObjectID

BSON::ObjectId 与 Mongo::ObjectID

使用 ObjectId 作为 mongo 中用户的唯一标识符的替代方法是啥?

Mongo Java 驱动程序 ObjectId.getCounter() 已弃用

如何在没有 ObjectId 的情况下将 Mongo 与 Spring Data 一起使用