AWS Ubuntu 标准 6.0 中 java 11 和 java 17 之间 Instant.now() 的更改

问题描述 投票:0回答:2

我们正在从 Java 11 (correto11) 迁移到 Java 17 (correto17)。作为其中的一部分,我们还必须将 AWS 中的 Ubuntu 从

standard:6.0
升级到
standard:4.0
,如此处所述。

我们观察到,在 Java 11 和 Java 17 中

Instant.now()
输出有点不同。

例如,

System.out.println("Instant: " + Instant.now());

给出如下输出

  • Java 11 -
    Instant: 2022-12-12T18:04:27.267229Z
  • Java 17 -
    Instant: 2022-12-12T18:04:27.267229114Z

有人可以告诉我这是什么原因造成的吗?我怎样才能使这两种情况下的行为相同?

java amazon-web-services java-11 java-17
2个回答
10
投票

Instant#now()
从系统时钟获取当前时刻。如果系统时钟返回的精度仅达到微秒,则
Instant#toString
只是截断九位数字中的最后三个零。如果运行 Java 17 (correto17) 的系统返回纳秒精度,您可以使用
Instant#truncatedTo(java.time.temporal.TemporalUnit)
将其截断为微秒精度。

public class Main {
    public static void main(String args[]) {
        Instant instant = Instant.now();
        Instant truncatedToMicros = instant.truncatedTo(ChronoUnit.MICROS);
        System.out.println(truncatedToMicros);
    }
}

Trail:日期时间了解有关现代日期时间 API 的更多信息。


0
投票

是的,我们需要注意的是,当我们使用MacOS时,时间API将仅以6位精度工作,但当我们使用Linux(例如Ubuntu)时,它将是9位:)

© www.soinside.com 2019 - 2024. All rights reserved.