我们已将我们的应用程序更新到 Java 15,并且系统时钟的新增强到纳秒精度 ( https://bugs.openjdk.java.net/browse/JDK-8242504 ) 与 Postgres 中的 TIMESTAMP 限制不兼容。时间因底层操作系统而异,Mac (Big Sur) 中的 Instant 不会以纳秒为单位给出时间,但在 Linux 中会给出。
我们在我们的代码库中使用 Instant 类型。我们的测试正在比较内存中 Instant 类型的对象与获取的对象,因此它们会根据它们运行的操作系统而失败。
在 Linux 中,内存中的 Instant 对象具有纳秒的精度,而 Postgres 存储的 Instant (TIMESTAMP) 具有微秒的精度。断言失败:
java.lang.AssertionError: expected [2021-01-04T19:32:23.726475249Z] but found [2021-01-04T19:32:23.726475Z]
在 Mac 中,Instant 对象的精度为微秒,与 Postgres 的时间戳精度完全一致,因此测试通过了,就像它们迄今为止所做的一样。
我们希望避免截断 Instant 或向 PG 添加插件以支持纳秒。
有人可以为这个问题提供更优雅的解决方案吗?