2 回答
TA贡献1799条经验 获得超6个赞
MongoDB 将在保存期间将您的日期转换为 GMT 时间。但是,如果您再次将日期拉到本地时区,您将有适当的时间。
如果您的应用程序适用于具有不同区域的不同地理位置,则可以在后端使用 GMT 时区,在前端使用本地时区。如果区域对您的业务案例很重要,您可以将 GMT 时间和区域分别保存在 mongodb 中。
TA贡献1817条经验 获得超6个赞
您将无法在 MongoDB 中的日期对象内保存区域。它只是看起来很糟糕,但它很好,我会尽力解释。
假设您要从以下位置保存日期:
德国/柏林为当地时间 2019-09-20T00:20:00.000 GMT+1
MongoDB 会将此日期转换为 GMT,您将在数据库中看到 ISODate("2019-09-19T23:20:00.000Z") (看起来就像您描述的前一天一样)
如果您获取此 mongo 文档并反序列化为带有日期的 Java 对象,您可以打印日期,您将看到:
在德国和 GMT+1 位置,您将打印您期望的 2019-09-20T00:20:00.000 GMT+1,因为 Java java.util.Date 会自动将 GMT 转换为本地时间
在其他位置,您会看到其他时间,例如在伦敦,您会看到 2019-09-19T23:20:00 GMT 并且没关系,因为伦敦比柏林早 1 小时
解决方案取决于您的情况,但常见的错误是日期选择器,它为本地日期提供时间 00:00 并且转换会产生问题。在这种情况下,只需从前端发送 UTC 日期。您有两种常见情况:
您需要节省在线通话时间(您不需要位置,一些成员来自日本,一些来自德国,一些来自巴西)在这种情况下,您可以从您的时间选择器发送本地时间,mongo 将转换为 GMT。当客户端获取日期时,您将返回 UTC,它们将自动转换为本地时间,所有客户端都会看到正确的时间
您需要节省面对面预约的时间(您需要保存位置,因为一些成员来自日本,一些来自德国,一些来自巴西,假设他们必须知道当地时间)在这种情况下,您可以将日期保存在一个字段和第二个字段中的 tiemzone。这将确保你想要什么。
如果您有其他案例或其他问题,请分享更多详细信息。
添加回答
举报