java 15 纳秒精度导致 Linux 环境出现问题

cat*_*h22 15 java postgresql java-time java-15

我有一个关于映射Instant到 PostgreSQL 的最佳实践问题TIMESTAMP

我们已将应用程序更新到 Java 15,系统时钟的新增强功能为纳秒精度 ( https://bugs.openjdk.java.net/browse/JDK-8242504 ) 与 Postgres 中的 TIMESTAMP 限制不兼容。时间根据底层操作系统的不同而不同,Mac (Big Sur) 中的 Instant 不提供以纳秒为单位的时间,但 Linux 中提供。

我们在代码库中使用即时类型。我们的测试正在比较内存中的 Instant 类型的对象与获取的对象,因此它们会失败,具体取决于它们运行的​​操作系统。

在Linux中,内存中的Instant对象的精度为纳秒,而Postgres存储的Instant(TIMESTAMP)的精度为微秒。断言失败:

java.lang.AssertionError: expected [2021-01-04T19:32:23.726475249Z] but found [2021-01-04T19:32:23.726475Z]
Run Code Online (Sandbox Code Playgroud)

在 Mac 中,Instant 对象的精度为微秒,与 Postgres 的时间戳精度充分一致,因此测试会像迄今为止所做的那样通过。

我们希望避免截断 Instant 或向 PG 添加插件来支持纳秒。

其他人如何以稳健、全面的方式处理这个问题?