【问题标题】:MEAN stack mongoose saves datetime with "Z" timezone wrongMEAN stack mongoose 用“Z”时区错误保存日期时间
【发布时间】: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


【解决方案1】:

如果您想保存特定国家/地区的时区并且您使用的是时刻,那么它很容易管理

下面的链接对你有帮助

Updating time offset with moment().utcOffset()

【讨论】:

  • 谢谢,但这不是我想说的......我的意思是MongoDB本身通常在mongodb中存储带有“Z”时区“AS IS”(这意味着本地时间)的日期时间值(到目前为止正如我从他们的文档中了解到的那样..) 但是猫鼬或任何使用“Z”时区创建日期时间的东西仍在将我的时间转换为 UTC 时间,我认为这不应该是..?
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2015-11-07
相关资源
最近更新 更多