在mongo DB中存储java 8 LocalDate

时间:2017-08-26 05:30:47

标签: java mongodb spring-boot java-8 spring-data-mongodb

使用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"),

     

"结束日期" :ISODate(" 2020-11-30T18:30:00.000Z&#34)

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

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

  

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