Day029 JDK8中新日期和時間API (二)

# JDK8中新日期和時間API (二)


Instant介紹

  • Instant:時間線上的一個瞬時點。 這可能被用來記錄應用程式中的事件時間 戳。
  • 在處理時間和日期的時候,我們通常會想到年,月,日,時,分,秒。然而,這只是 時間的一個模型,是面向人類的。第二種通用模型是面向機器的,或者說是連 續的。在此模型中,時間線中的一個點表示為一個很大的數,這有利於電腦 處理。在UNIX中,這個數從1970年開始,以秒為的單位;同樣的,在Java中, 也是從1970年開始,但以毫秒為單位。
  • java.time包通過值類型Instant提供機器視圖,不提供處理人類意義上的時間 單位。Instant表示時間線上的一點,而不需要任何上下文資訊,例如,時區。 概念上講,它只是簡單的表示自1970年1月1日0時0分0秒(UTC)開始的秒 數。因為java.time包是基於納秒計算的,所以Instant的精度可以達到納秒級。
  • (1 ns = 10^-9 s) 1秒 = 1000毫秒 =106微秒=109納秒

Instant使用


方法 描述
now() 靜態方法,返回默認UTC時區的Instant類的對象
ofEpochMilli(long epochMilli) 靜態方法,返回在1970-01-01 00:00:00基礎上加上指定毫秒 數之後的Instant類的對象
atOffset(ZoneOffset offset) 結合即時的偏移來創建一個 OffsetDateTime
toEpochMilli() 返回1970-01-01 00:00:00到當前時間的毫秒數,即為時間戳

時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01 日08時00分00秒)起至現在的總秒數。

public class JDK8InstantTest {
    public static void main(String[] args) {

        //now()獲取當前本初子午線的時間
        Instant instant = Instant.now();
        System.out.println(instant);

        //atOffset(ZoneOffset offset)添加偏移量(如:中國用的時間,東8區時間,偏移量是8個小時)
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);

        //toEpochMilli()獲取instant對應的時間戳
        long milli = instant.toEpochMilli();
        System.out.println(milli);

        /*
        ofEpochMilli(long epochMilli)創建在1970-01-01 00:00:00基礎上加上指定毫秒數之後的Instant類的對象
        */
        Instant instant1 = Instant.ofEpochMilli(1622250249988L);
        System.out.println(instant1);
    }
}

輸出結果

2021-05-29T01:04:51.292Z
2021-05-29T09:04:51.292+08:00
1622250291292
2021-05-29T01:04:09.988Z

尚矽谷