lnstant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。
在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。
java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。
(1 ns = 10-9s) 1秒=1000毫秒=10^6微秒=10^9纳秒
代码如下:
import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; public class StartApplication { public static void main(String[] args) { //now()∶获取本初子午线对应的标准时间 Instant instant = Instant.now(); System.out.println(instant); //时间偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); //toEpochMilli()∶获取自1970年1月1日e时e分0秒(UTC)开始的毫秒数-->Date类的getTime() long milli = instant.toEpochMilli(); System.out.println(milli); //ofEpochMilli():通过给定的毫秒数,获取Instant实例-->Date(Long millis) Instant ofEpochMilli = Instant.ofEpochMilli(1652169597572L); System.out.println(ofEpochMilli); } }
结果如下:
2022-05-10T08:04:32.230Z
2022-05-10T16:04:32.230+08:00
1652169872230
2022-05-10T07:59:57.572Z