java instant_Java Instant类
Instant Class : An instantaneous point on the time-line.
Instant對象表示的就是在時間線上的一點。
Instant對象和時間戳是一一對應(yīng)的。
這個類能干什呢?
1,處理和時間戳相關(guān)的
2,但是不處理 年月日這種單位
作用1 獲得當前時間的毫秒的時間戳
Instant timestamp = Instant.now();
long ts = timestamp.toEpochMilli();
既然Instant類是處理時間戳的,肯定可以用ts構(gòu)造一個Instant對象
ts 轉(zhuǎn)為 Instant對象
long ts2 = 1584700633000L;
Instant instant = Instant.ofEpochMilli(ts2);
LocalDateTime ldt3 = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println(ldt3);
Instant類還提供了一些常量,如
EPOCH 是一個常量,也就是 時間戳為0的時刻。代表紀元的開始, 以后的時間戳是正數(shù),之前的時間戳是負數(shù)。
MIN:Instant能表示的最早的時間
MAX:Instant能表示的最晚的時間
// 時間移動計算,加1小時, 減5天等
// 一小時以后
Instant timestamp = Instant.now();
Instant oneHourLater = timestamp.plus(1, ChronoUnit.HOURS);
LocalDateTime ldt = LocalDateTime.ofInstant(oneHourLater, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt.getMonth(), ldt.getDayOfMonth(),
ldt.getYear(), ldt.getHour(), ldt.getMinute());
// 兩天前
Instant timestamp = Instant.now();
Instant twoDaysAgo = timestamp.minus(2, ChronoUnit.DAYS);
LocalDateTime ldt2 = LocalDateTime.ofInstant(twoDaysAgo, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt2.getMonth(), ldt2.getDayOfMonth(),
ldt2.getYear(), ldt2.getHour(), ldt2.getMinute());
因為Instant類是不處理 年月日這種人類的時間單位,如果要處理,需要把 Instant對象轉(zhuǎn)換為 LocalDateTime 或者 ZonedDateTime 這時需要和一個時區(qū)綁定。
Instant timestamp;
LocalDateTime ldt = LocalDateTime.ofInstant(timestamp, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt.getMonth(), ldt.getDayOfMonth(),
ldt.getYear(), ldt.getHour(), ldt.getMinute());
代碼:
package com.example.demo;
import static java.time.Instant.EPOCH;
import static java.time.Instant.MAX;
import static java.time.Instant.MIN;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
public class InstantT {
public static void main(String[] args) {
// 獲取當前時間戳 Instant timestamp = Instant.now();
long ts = timestamp.toEpochMilli();
// ts 轉(zhuǎn)為 Instant對象 long ts2 = 1584700633000L;
Instant instant = Instant.ofEpochMilli(ts2);
// instant 可以轉(zhuǎn)化為LocalDateTime 表示當?shù)氐臅r間 LocalDateTime ldt3 = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println(ldt3);
// LocalDateTime 可以進一步轉(zhuǎn)化為ZonedDateTime,加上了時區(qū)的信息 ZonedDateTime zonedDateTime = ZonedDateTime.of(ldt3, ZoneId.systemDefault());
// ZonedDateTime 又可以轉(zhuǎn)換從Instant Instant l = zonedDateTime.toInstant();
System.out.println(l);
boolean equals = instant.equals(l);
System.out.println(equals);
Instant epoch = EPOCH;
System.out.println(epoch);
System.out.println(MIN); //-1000000000-01-01T00:00:00Z System.out.println(MAX); //+1000000000-12-31T23:59:59.999999999Z
// 一小時以后 Instant oneHourLater = timestamp.plus(1, ChronoUnit.HOURS);
LocalDateTime ldt = LocalDateTime.ofInstant(oneHourLater, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt.getMonth(), ldt.getDayOfMonth(),
ldt.getYear(), ldt.getHour(), ldt.getMinute());
// 兩天前 Instant twoDaysAgo = timestamp.minus(2, ChronoUnit.DAYS);
LocalDateTime ldt2 = LocalDateTime.ofInstant(twoDaysAgo, ZoneId.systemDefault());
System.out.printf("%s %d %d at %d:%d%n", ldt2.getMonth(), ldt2.getDayOfMonth(),
ldt2.getYear(), ldt2.getHour(), ldt2.getMinute());
}
}
總結(jié)
以上是生活随笔為你收集整理的java instant_Java Instant类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 源码看JAVA【十】Short
- 下一篇: 详谈 import 路径