在mongoDB中存储java 8 LocalDate

问题描述 投票:6回答:2

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

我想在LocalDate存储mongo DB,但我面临一个奇怪的问题。

        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

-----结束日期:---- 2020-12-01

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

以下是MongoDb的json:

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

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

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

有人可以在这里帮助我..为什么日期在控制台上是正确的但在MongoDB中没有,以及如何解决这个问题。

java mongodb spring-boot java-8 spring-data-mongodb
2个回答
5
投票

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

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

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

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


1
投票

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

JSR-310 Instant,LocalDate和LocalDateTime支持已将Instant,LocalDate和LocalDateTime的支持添加到驱动程序中。

© www.soinside.com 2019 - 2024. All rights reserved.