【发布时间】:2018-07-10 09:23:41
【问题描述】:
在 Mongodocs 中,据说最后指定“Z”时区的日期时间保存为“UTC”日期时间格式。 https://docs.mongodb.com/manual/reference/method/Date/
我在 Python 中创建了一些示例时间数据:
now=str((datetime.datetime.now()).isoformat())+'Z'
then=str((datetime.datetime.utcnow()+datetime.timedelta(0,one_week_in_seconds)).isoformat())+'Z'
我使用了 datetime.now() 和 datetime.utcnow() 并在两者上都附加了“Z”... 这就是我得到的:
'now': '2018-07-10T11:06:05.512484Z',
'then': '2018-07-17T09:06:05.512484Z',
我现在使用 MEAN 堆栈与 Node/Express 和 mongoose (ODM) 驱动程序在数据库中创建我的模式模型。当我通过一些路由器中间件将数据推送到我的 mongoDB 数据库时,这两个字段具有猫鼬“日期”格式。但是,对于这两个字段,它都会创建一个 ISODate 时间格式...:
"now" : ISODate("2018-07-10T09:02:01.410Z"),
"then" : ISODate("2018-07-17T09:02:01.410Z"),
我认为这是一个错误,通常,如果指定了“Z”,它应该以 ISO 格式创建指定的时间,它就在这里,但是因为我已经以本地时间格式创建了时间并附加了一个“ Z”在第一种情况下(“现在”),时间应该保存为'now' : ISODate("2018-07-10T11:06:05.512484Z")而不修改/
是否从本地时间转换为 UTC 时间?
【问题讨论】:
-
不太确定你在问什么,但所有datetimes stored in MongoDB 都以 UTC 为 64 位整数毫秒计数。您在 shell 中看到的
ISODate构造和带有 Z 后缀的字符串只是该 UTC 日期时间的 shell 表示。 -
我最初的问题(或我试图指出的)是,带有时区“Z”后缀的日期时间对象应该从客户端“按原样”(表示本地时间)保存,而不需要转换到某个 UTC 日期时间,或者不是?如果我给出“Z”,我想表示它已经是 UTC 时间并且应该“按原样”保存。但它仍会转换为 UTC,但仍有一些偏移量..?为什么?
-
您能否用一个无法按预期工作的可重现示例来更新您的问题?
-
不确定如何给你一个可重现的例子,除非你有带有路由链接的 Node/Express 作为后端,并且可以发布到你的中间件,并且你已经在你的模式中声明了 Date 字段,并且您在 Python 中创建一个日期时间并将其与请求库一起发送到您的 Post Url 以创建数据集.. ;)
-
我们的想法是将其简化为可以在 JavaScript MongoDB shell 中重现的东西。
标签: node.js mongodb datetime mongoose