【发布时间】:2021-05-29 22:00:19
【问题描述】:
我正在开发一个应用程序来管理物联网设备的操作变化,这些设备可以在地球上的任何地方使用不同的时区,我正在使用 python、mongodb 和 pymongo。
众所周知,当我们在 mongodb 中存储日期时,它会自动将我们时区的日期转换为 UTC,方法是更改时间但保持下面相同的绝对值。
我遇到的问题是,当我使用 pymongo 查询数据库以获取日期时,我得到的日期和时间与 mongodb 中存储的 UTC 日期和时间完全相同,但在我的时区中没有进行转换更改;
例如,假设我在 python 中使用“datetime”库创建了一个日期时间:
MY_TIMEZONE = pytz.timezone('America/Bogota')
datetime.now().astimezone(MY_TIMEZONE)
我在我的时区得到这个日期:
'2021-02-25 00:00:00-05:00'
看看最后的-05:00
当我将该日期保存在 atlas 中的 mongodb 集合中时,它会将日期转换为 UTC,如下所示:
'2021-02-25 05:00:00.000+00:00'
看看最后的+00:00
到目前为止一切顺利,当我使用 pymongo 方法“find_one”查询数据库以获取相同的日期时,问题就来了
我得到的是这样的:
'2021-02-25 05:00:00-05:00'
看看最后的-05:00
与 UTC 相同的时间和日期,但在我的时区,理论上不应该发生,我应该得到 UTC 或本地时区的日期,但会发生变化。这个错误在我正在开发的系统中可能很关键。
如果这是当前版本中的某种错误,有谁知道会发生什么? 我正在使用 python 3.8.5、pymongo 3.11.3 和 mongodb 4.4.4
我到处都看过这个问题,但似乎只有我一个发生了,在本地添加或减去时差不是一个选项,我想我将不得不选择使用时间戳来避免这种情况问题或其他头痛。
【问题讨论】:
-
您是否设置了
tz_aware标志?见pymongo.readthedocs.io/en/stable/api/bson/…
标签: python mongodb date datetime pymongo