Java17中如何使用Instant类生成截断为毫秒的ISO 8601格式

11 阅读1分钟

大家在工作中是如何生成时间戳的呢

Java8提供了一个核心类Instant,它代表时间轴上的一个绝对的时间点,所以用它记录时间戳再合适不过了。

特性

  • UTC时间:Instant表示的是格林威治标准时间,不含时区信息。
  • 起始时间:从1970-01-01T00:00:00Z(Unix 纪元)开始所经过的时间,精确到纳秒。
  • 线程安全:Instant是不可变对象。

使用

虽然看起来这个类不像Date、LocalDate这些类那么眼熟,其实使用起来超简单。

创建对象后,可以直接输出查看,参考代码如下:

Instant now = Instant.now();

System.out.println(now);

直接打印会输出什么呢? 2026-01-26T00:50:26.287Z,这是一个标准的ISO 8601格式,这个时间格式很容易看懂。

JDK17中的小变化

当使用JDK17时,它变成了这样2026-01-26T00:51:41.594678300Z

由原来的3位毫秒,变为了9位纳秒。这样也是可以直接使用的。如果要求格式严格统一,则可以将其截断为指定单位。

截断为毫秒的参考代码如下:

Instant truncated = Instant.now().truncatedTo(java.time.temporal.ChronoUnit.MILLIS);
System.out.println(truncated);