【问题标题】:mongodb, truncates milliseconds in datetime after savemongodb,保存后截断日期时间的毫秒数
【发布时间】: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")

【问题讨论】:

标签: java mongodb spring-boot kotlin jackson


【解决方案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) 的地方。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 2014-10-16
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多