从python检查mongodb中的datetime对象是否为UTC格式



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 ?

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

pymongo返回的datetime对象总是表示UTC的时间,就像MongoDB中存储的日期总是存储为(即假定为)UTC一样。

如果在创建Connection时将tz_info标志设置为True,则

pymongo可以自动将datetime转换为时区感知。然后,如果您愿意,可以使用datetimeastimezone()方法转换到另一个时区。

引用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

相关内容

  • 没有找到相关文章

最新更新