使用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中没有,以及如何解决这个问题。
答案 0 :(得分:5)
date object returns的mongo-java客户端作为实例
java.util.Date
。
问题可能是当您保存startDate
和endDate
值时,其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的支持已添加到驱动程序中。