mongodb,保存后截断日期时间的毫秒数
Posted
技术标签:
【中文标题】mongodb,保存后截断日期时间的毫秒数【英文标题】:mongodb, truncates milliseconds in datetime after save 【发布时间】:2020-04-10 19:24:51 【问题描述】:我有一些带有 LocalDateTime 类型的日期时间字段的对象
保存前:
date=date=2019-12-18T09:27:20.939826
从存储库中保存和获取:
date=2019-12-18T09:27:20.939
如您所见,日期已被截断。
这会导致单元测试中的对象不同并且断言失败。
解决这个问题的最佳方法是什么?怎么做?
编辑:
配置:
spring:
data.mongodb:
uri: mongodb://localhost:27017/app-db-test
jackson:
serialization:
write_dates_as_timestamps: false
在 mongodb 中保存的日期时间:
ISODate("2019-12-18T09:27:20.939+0000")
【问题讨论】:
github.com/mongodb/mongo/blob/… -- 你可以试试这个吗?希望这项工作。 【参考方案1】:来自https://docs.mongodb.com/manual/reference/bson-types/#date:
BSON 日期是一个 64 位整数,表示自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。
来自https://en.wikipedia.org/wiki/Millisecond
毫秒(来自毫秒和秒;符号:ms)是千分之一(0.001 或 10−3 或 1/1000)秒。
0.939826 - 是微秒精度。
我找不到任何关于是否应该将其四舍五入到 0.940 或截断到 0.939 的文档。我想这取决于驱动程序的实现。
【讨论】:
【参考方案2】:解决方案:
设置日期字段时使用:
LocalDateTime.now(ZoneOffset.UTC).withNano(0)
在我的应用程序中,我引入了一个中心类“时钟”,我们可以从中获取当前时间:
Clock.time(ZoneOffset.UTC)
此类有助于提高可测试性,但也是调用 .withNano(0)
的地方。
【讨论】:
以上是关于mongodb,保存后截断日期时间的毫秒数的主要内容,如果未能解决你的问题,请参考以下文章