5

mongodb中,名为的字段joining_date显示为

"Sun Dec 19 2010 05:35:55 GMT+0000 (UTC)"

如您所见,这是一个 UTC 日期。

但是从 pymongo 访问时,相同的字段显示为

 datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)

从 python 我需要检查日期是否为 utc 格式。

问题:我得到一个奇怪的结果,如下所示

v = datetime(2010, 12, 19, 5, 35, 55, 286000)
v.tzinfo == pytz.utc # Returns False !..why ?

如何取回原始字符串或如何检查是否Sun Dec 19 2010 05:35:55 GMT+0000 (UTC)为UTC 格式?datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)

4

2 回答 2

11

datetimepymongo 返回的对象始终表示 UTC 时间,就像存储在 MongoDB 中的日期始终存储为(即假定为)UTC 一样。

datetime如果您在tz_info创建. 然后,您可以根据需要使用s方法转换到另一个时区。TrueConnectiondatetimeastimezone()

于 2011-08-13T00:48:39.890 回答
1

引用 PyMongo 文档:

从服务器检索到的所有日期时间(无论您使用的是什么版本的驱动程序)都将是幼稚的并代表 UTC。

v.tzinfo is None。如果您尝试将它们转换为另一个时区,您会收到警告:

>>> v.astimezone(pytz.timezone("US/Eastern"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime

但是,您可以通过datetime(v.year, v.month, v.day, v.hour, v.minute, v.second, v.microsecond, pytz.utc). 在这种情况下,您的原始代码将起作用:

v = datetime(2010, 12, 19, 5, 35, 55, 286000, pytz.utc)
v.tzinfo == pytz.utc # Returns True
于 2011-07-27T15:50:05.090 回答