【问题标题】:How to insert datetime string into Mongodb as ISODate using pymongo如何使用 pymongo 将日期时间字符串作为 ISODate 插入 Mongodb
【发布时间】:2017-06-19 08:09:47
【问题描述】:

如何将"2017-10-13T10:53:53.000Z" 这样的日期时间字符串作为 ISODate 插入 mongo db? 插入时,我在 mongodb 中得到一个字符串: datetime.strptime("2017-10-13T10:53:53.000Z", "%Y-%m-%dT%H:%M:%S.000Z")

【问题讨论】:

标签: python pymongo


【解决方案1】:

这对我有用:

from pymongo.mongo_client import MongoClient
import datetime

d = datetime.datetime.strptime("2017-10-13T10:53:53.000Z", "%Y-%m-%dT%H:%M:%S.000Z")

with MongoClient() as mongo:
    db = mongo.get_database("test")
    db['dates'].insert({"date" : d})

签入mongo:

> use test
switched to db test
> db.dates.findOne()
{
    "_id" : ObjectId("589307d7cfd6c908d4b677d6"),
    "date" : ISODate("2017-10-13T10:53:53Z")
}

更新:如评论所述,如果您收到“时间数据与格式不匹配”​​错误,请尝试更通用的格式字符串,例如:%Y-%m-%dT%H:%M:%S.%fZ

【讨论】:

  • 我得到一个“时间数据与格式不匹配”​​,必须将格式字符串稍微更改为:“%Y-%m-%dT%H:%M:%S.%fZ "
  • 即使更改为@Mirko 格式也不起作用,“ValueError:时间数据'1970-01-18 20:15:07.234807'与格式'%Y-%m-%dT'不匹配%H:%M:%S.%fZ'"
  • @Sohail,对于该值,格式为"%Y-%m-%d %H:%M:%S.%f"(请注意,您的值不包括分隔日期和时间的T,也不包括尾随Z。因此这些需要从格式字符串中删除。
  • python datetime 对象具有 isoformat 方法,例如datetime.datetime.now().toisoformat() 足以满足当前日期时间为 iso 格式
  • 我测试了datetime.datetime.now().toisoformat() 并发现datetime.datetime.now().isoformat() 在python 3.8 中有效。也许语法改变了?
【解决方案2】:

使用dateutil dateutil.parser.parse("2017-10-13T10:53:53.000Z") 将返回datetime.datetime(2017, 10, 13, 10, 53, 53, tzinfo=tzutc())

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2016-01-11
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多