在 mongo 数据库中存储 java 8 个 LocalDate

Storing java 8 LocalDate in mongo DB

使用 Spring 启动 1.5.4.RELEASE 和 Mongo 驱动程序 3.4.2

我想在mongo DB中存储LocalDate,但我遇到了一个奇怪的问题:

LocalDate startDate = LocalDate.now();
LocalDate endDate = LocalDate.of(2020,12,01);
System.out.println("---- StartDate : ---"+startDate); 
System.out.println("-----End Date : ----"+endDate);
        
        repository.save(new Person("Mehraj","Malik", startDate, endDate));

控制台输出:

---- StartDate : ---2017-08-26

-----End Date : ----2020-12-01

但在 MongoDb 中存储的日期不正确。

以下是来自 MongoDb 的 json:

"startDate" : ISODate("2017-08-25T18:30:00.000Z"),

"endDate" :ISODate("2020-11-30T18:30:00.000Z")

此外,我注意到根据印度时间存储的时间也不正确。

为什么控制台上的日期正确但 MongoDB 中的日期不正确以及如何解决此问题?

mongo-java 客户端作为 date object returns 的实例 java.util.Date.

问题可能是当您保存 startDateendDate 值时,它的 toString() 方法可能会使用 JVM 的默认时区来更新值。

doc here 声明 官方 BSON 规范将 BSON 日期类型称为 UTC 日期时间。 并且可能是您的 LocalDateTime 属性在保存到数据库之前被转换为 UTC 时区的原因。

另外,为了避免这种混淆,建议使用 bson 类型 timestamp 来更新日期字段。

在MongoDB Java Driver 3.7 release : http://mongodb.github.io/mongo-java-driver/3.7/whats-new/ 我们可以看到驱动现在支持LocalDate :

JSR-310 Instant, LocalDate & LocalDateTime support Support for Instant, LocalDate and LocalDateTime has been added to the driver.