5

作为 map-reduce 调用的一部分,我将日期值添加到 MongoDB 集合中:

day = Date.UTC(this.time.getFullYear(), this.time.getMonth(), this.time.getDate());
emit({ user : this.user, day : day }, { count : 1 });

当我稍后在 Mongo shell 中查询这个集合时,我看到:

{ "_id" : { "user" : "assaf", "day" : 1331769600000 }, "value" : { "count" : 15 } }
{ "_id" : { "user" : "assaf", "day" : 1331856000000 }, "value" : { "count" : 57 } }

不知何故,日期看起来像一个整数 - 我猜它是一些时间戳表示。如果我这样做:

PRIMARY> new Date(db.my_collection.find()[0]["_id"]["day"])

我找回了正确的日期:

ISODate("2012-03-19T00:00:00Z")

我的问题是如何在 pymongo 中做同样的事情。如果我对上述集合运行任何查询,pymongo 会返回文档,其中day值作为浮点类型,其值与时间戳相同:

dict: {u'_id': {u'user': u'ariel', u'day': 1332115200000.0}, u'value': {u'count': 99.0}}

如何将此时间戳转换为 Python datetime

4

2 回答 2

6

自纪元(1970 年 1 月 1 日)以来的毫秒数:

>>> from __future__ import division
>>> dict = {u'_id': {u'user': u'ariel', u'day': 1332115200000.0}, u'value': {u'count': 99.0}}
>>> datetime.datetime.utcfromtimestamp(dict['_id']['day'] / 1000.0)
datetime.datetime(2012, 3, 19, 0, 0)
>>>

更新:从第一条评论中添加了部门检查。

于 2012-09-08T17:00:16.563 回答
0

问题的标题与代码不同。

Date.UTC() 返回一个整数,而不是日期对象。您正在存储整数,而 mongoDB 对此很好。稍后,您将整数取出并在 Date() 构造和 javascript 环境中使用它,这一切都很好。但是在python中,它只看到整数。之前发布的转换似乎是一个很好的转换。

于 2015-06-16T19:07:37.273 回答