8

如果我尝试将日期字段放入文档 (BSON) 并将其写入 Mongo,BSON 会以 UTC 格式写入。例如,一个日期

DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());

将被存储为

"date" : ISODate("2015-06-30T18:30:00Z")

在蒙古。而且,如果我使用相同的 Java 驱动程序检索它,我会得到它

Wed Jul 01 00:00:00 IST 2015

伟大的。没有解决办法吗?我的意思是,为什么我不能按我的意愿存储我的日期?如果我需要从另一个时区查询数据库怎么办?我会得到不同的结果吗?日期字段是 Mongo 的重要组成部分,周围有丰富的运算符。不过,为什么 Mongo 不提供这种灵活性呢?谢谢

4

4 回答 4

4

IMO,mongo 做的一切都是正确的。您使用本地时区实例化日期,然后以 UTC 将其存储在 mongo 中。然后,当您要求 mongo 为您检索它时,它会再次将日期转移到您当地的时区。

如果您不想处理时区转换,只需使用以下标志将您的本地时区设置为 UTC:

-Duser.timezone="UTC"
于 2015-07-27T14:40:52.210 回答
0

当使用DateTime(fromorg.joda.timejava.time) 时区的日期被创建,不幸的是 MongoDB 不支持它。(参见BSON 类型

因此,将其保留在 UTC 中是一种简单可靠的解决方案,不会丢失任何数据。

作为替代方案,您应该查看LocalDateTime. 它包含 no DateTimeZone,因此无需先转换任何内容。

于 2015-07-27T14:22:39.273 回答
0

得到了一个非常简单的解决方案。让日期在您的 MongoDB 中使用 UTC。
每当您将其提取到您的 UI 时,只需执行以下操作:

new Date(fetchedDate);

它将其转换为本地日期。

于 2019-02-02T19:33:08.030 回答
0

我通过在代码本身中将我的时区设置为 UTC 解决了这个问题。

    DateTimeZone zone = DateTimeZone.UTC;
    DateTimeZone.setDefault(zone);
于 2015-07-28T06:05:37.077 回答