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