检查mongodb中的日期时间对象是否为UTC格式,来自python

时间:2011-07-27 15:19:59

标签: python datetime pymongo pytz

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)取回原始字符串datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)或如何检查datetime.datetime(2010, 12, 19, 5, 35, 55, 286000)是否为UTC格式?

2 个答案:

答案 0 :(得分:11)

pymongo返回的

datetime对象始终表示UTC的时间,就像存储在MongoDB中的日期总是存储为(即假设为)UTC。

如果您在创建datetime时将tz_info标记设置为True,则pymongo可以自动将Connection转换为时区。然后,您可以根据需要使用datetime s astimezone()方法转换为其他时区。

答案 1 :(得分: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