我们正在从 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());
给出如下输出
Instant: 2022-12-12T18:04:27.267229Z
Instant: 2022-12-12T18:04:27.267229114Z
有人可以告诉我这是什么原因造成的吗?我怎样才能使这两种情况下的行为相同?
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 的更多信息。
是的,我们需要注意的是,当我们使用MacOS时,时间API将仅以6位精度工作,但当我们使用Linux(例如Ubuntu)时,它将是9位:)