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,保存后截断日期时间的毫秒数的主要内容,如果未能解决你的问题,请参考以下文章

js过去前一天日期

Java计算两个日期时间相差几天,几小时,几分钟等

Java计算两个日期时间相差几天,几小时,几分钟等

将日期、时间和 UTC 偏移值转换为自 unix 纪元以来的毫秒数?

Java计算两个日期之间的时间差(毫秒数)

如何在 Python 中将日期时间对象转换为自纪元(unix 时间)以来的毫秒数?