您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān) Instant時(shí)間戳如何在Java8中使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1. 創(chuàng)建Instant實(shí)例,獲取系統(tǒng)的當(dāng)前時(shí)間now
/** * Java 8 Instant時(shí)間戳學(xué)習(xí) */ @Test public void testInstant(){ // 通過Instant創(chuàng)建Instant實(shí)例 返回:return Clock.systemUTC().instant(); Instant now = Instant.now(); //控制臺(tái)輸出:now = 2020-12-29T06:32:49.480Z (以ISO-8601格式輸出) System.out.println("now = " + now); }
注意:這里額控制臺(tái)輸出:now = 2020-12-29T06:32:49.480Z。
Intance的now方法:
public static Instant now() { return Clock.systemUTC().instant(); }
這是輸出的世界標(biāo)準(zhǔn)時(shí)間,其中T表示時(shí)分秒的開始(或者日期與時(shí)間的間隔),Z表示這是一個(gè)世界標(biāo)準(zhǔn)時(shí)間。
Instant 是時(shí)間戳,是指世界標(biāo)準(zhǔn)時(shí)格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù),Instant本身實(shí)際上是指明時(shí)區(qū)了,是0時(shí)區(qū)(也就是比北京時(shí)間少8小時(shí))。
2.1 通過方法Instant.now().atZone(ZoneId.systemDefault())獲取當(dāng)前地區(qū)的時(shí)間
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault()); System.out.println(zonedDateTime);
輸出結(jié)果
2020-12-31T17:31:14.953+08:00[Asia/Shanghai]
2.2 通過增加8小時(shí),轉(zhuǎn)化為北京時(shí)間
方法名稱 | 描述 |
---|---|
plusMillis() | 增加時(shí)間戳?xí)r間,以毫秒為單位 |
minusNanos() | 增加時(shí)間戳?xí)r間,以納秒為單位 |
minusSeconds() | 增加時(shí)間戳?xí)r間,以秒為單位 |
TimeUnit.HOURS.toMillis() | 將小時(shí)轉(zhuǎn)化為毫秒數(shù) |
//增加8個(gè)小時(shí),使Instant.now()返回時(shí)間為北京時(shí)間 Instant now2 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8)); System.out.println("now2 = " + now2);
輸出結(jié)果:now2 = 2020-12-29T14:35:32.631Z
轉(zhuǎn)換為符合當(dāng)前的北京時(shí)間。
通過 getEpochSecond()方法獲取距離格林威治時(shí)間的秒數(shù)
通過toEpochMilli()方法獲取距離格林威治時(shí)間的毫秒數(shù)
//增加8個(gè)小時(shí),使Instant.now()返回時(shí)間為北京時(shí)間 Instant now2 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8)); //獲取格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)距離當(dāng)前時(shí)間的秒/毫秒值 System.out.println("距離1970年01月01日00時(shí)00分00秒 : "+now2.getEpochSecond() + "秒"); System.out.println("距離1970年01月01日00時(shí)00分00秒 : "+now2.toEpochMilli() + "毫秒");
輸出結(jié)果:
距離1970年01月01日00時(shí)00分00秒 : 1609435201秒
距離1970年01月01日00時(shí)00分00秒 : 1609435201645毫秒
4.1 java.time.Instant.from(TemporalAccessor temporal)源碼:
public static Instant from(TemporalAccessor temporal) { if (temporal instanceof Instant) { return (Instant) temporal; } Objects.requireNonNull(temporal, "temporal"); try { long instantSecs = temporal.getLong(INSTANT_SECONDS); int nanoOfSecond = temporal.get(NANO_OF_SECOND); return Instant.ofEpochSecond(instantSecs, nanoOfSecond); } catch (DateTimeException ex) { throw new DateTimeException("Unable to obtain Instant from TemporalAccessor: " + temporal + " of type " + temporal.getClass().getName(), ex); } }
參數(shù):temporal 是要轉(zhuǎn)換的時(shí)間對象,返回的是一個(gè)轉(zhuǎn)換為Instant的瞬間值
如果轉(zhuǎn)換為Instant的時(shí)候失敗,會(huì)拋出異常``DateTimeException`
4.2 parse方法源碼
public static Instant parse(final CharSequence text) { return DateTimeFormatter.ISO_INSTANT.parse(text, Instant::from); }
創(chuàng)建自定義的時(shí)間戳
//創(chuàng)建自定義的時(shí)間戳 System.out.println(Instant.parse("2020-12-29T14:35:32.631Z"));
輸出結(jié)果
2020-12-29T14:35:32.631Z
//獲取當(dāng)前時(shí)間戳 Instant instant = Instant.now(); //獲得當(dāng)前時(shí)間戳并且增加66毫秒 Instant instant1 = Instant.now().plusMillis(66); //獲得當(dāng)前時(shí)間戳并且減少66毫秒 Instant instant2 = Instant.now().minusMillis(66); //判斷時(shí)間戳 instant 是否在 instant1 之后,返回boolean System.out.println(instant.isAfter(instant1)); //返回false //判斷時(shí)間戳 instant 是否在 instant1 之前,返回boolean System.out.println(instant.isBefore(instant1)); //返回true //判斷兩個(gè)時(shí)間戳是否相等, 返回boolean值 System.out.println(instant.equals(instant1)); //返回false //獲得當(dāng)前時(shí)間戳并增加1小時(shí) 通過TimeUnit.HOURS.toMillis(1)將小時(shí)轉(zhuǎn)換為毫秒,然后通過plusMillis增加 Instant instant3 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(1)); //獲取時(shí)間戳 instant和instant3 相差天數(shù),返回long類型 //如果小于1天,都算零天,大于等于1天,小于2天算一天 System.out.println("相差天數(shù) = " + instant.until(instant3, ChronoUnit.DAYS)); //返回0 //獲取時(shí)間戳 instant和instant3 相差的小時(shí)數(shù),返回long類型 System.out.println("相差小時(shí) = " + instant.until(instant3, ChronoUnit.HOURS)); //返回1 //獲取時(shí)間戳 instant和instant3 相差的毫秒數(shù),返回long類型 System.out.println("相差毫秒數(shù) = " + instant.until(instant3, ChronoUnit.MILLIS)); //返回3600000
輸出結(jié)果:
false
true
false
相差天數(shù) = 0
相差小時(shí) = 1
相差毫秒數(shù) = 3600000
Instant now = Instant.now(); //UTC ZonedDateTime atZone = now.atZone(ZoneOffset.UTC); //LocalDateTime atZone.toLocalDateTime(); LocalDateTime.from(atZone); //LocalDate atZone.toLocalDate(); LocalDate date = LocalDate.from(atZone); //LocalDateTime atZone.toLocalDateTime(); LocalDateTime.from(date);
上述就是小編為大家分享的 Instant時(shí)間戳如何在Java8中使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。