国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 8 時(shí)間 API 快速入門

taoszu / 3482人閱讀

摘要:的操作加減相互比較獲得時(shí)間差。表示一天當(dāng)中的時(shí)間,其精確度到納秒。既包含日期也包含時(shí)間,但是不包含時(shí)區(qū)。此外一個(gè)對(duì)象和一個(gè)對(duì)象可以組合為一個(gè)對(duì)象。表示以天為單位的時(shí)長(zhǎng),精確到天。

Java 8 出來(lái)很久了,各位也可能已經(jīng)在用了,不過(guò)其中新的時(shí)間日期 API 可能很少人用,甚至不知道怎么上手。本文快速介紹一下其中的主要的類的概念和用法。

一、時(shí)間戳 Instant

Instant 表示一個(gè) EPOCH 時(shí)間戳(即以 0 表示 1970-01-01T00:00:00Z),精確到納秒。Instant 對(duì)象不包含時(shí)區(qū)信息,且值是不可變的。

雖然概念很簡(jiǎn)單,但是它可以很方便的和其他時(shí)間日期對(duì)象之間進(jìn)行交互和轉(zhuǎn)換。比如:

兩個(gè) Instant 可以用來(lái)構(gòu)建一個(gè)時(shí)間段;

一個(gè) Instant 加上一個(gè)時(shí)長(zhǎng)可以得到另一個(gè) Instant

一個(gè) Instant 加上一個(gè)時(shí)區(qū)可以得到一個(gè) ZonedDateTime 對(duì)象。

? 創(chuàng)建 Instant

首先 Instant 有下面幾個(gè)常量:

Instant.EPOCH 表示 1970-01-01T00:00:00Z

Instant.MIN 表示 Instant 可度量的最早時(shí)間,公元前十億年

Instant.MAX 表示 Instant 可度量的最晚時(shí)間,公元十億年

我們也可以通過(guò)一些靜態(tài)方法來(lái)創(chuàng)建:

Instant.now() 表示當(dāng)前時(shí)間戳

Instant.ofEpochMilli(long milliSec) 通過(guò)現(xiàn)有的毫秒時(shí)間戳來(lái)創(chuàng)建 Instant 對(duì)象

Instant.ofEpochSecond(long seconds) 通過(guò)現(xiàn)有的秒時(shí)間戳來(lái)創(chuàng)建 Instant 對(duì)象

? 從 Instant 取值

Instant 對(duì)象包含兩個(gè)值:秒數(shù)和納秒數(shù)。其中秒數(shù)指的是 epoch 時(shí)間戳,而納秒數(shù)指的是該秒內(nèi)的納秒時(shí)間。由此可知,Instant 對(duì)象的精確度比 System.currentTimeMillis() 高到不知道哪去了。

所以從 Instant 可以取到兩個(gè)值:Instant.getEpochSecond() 獲取秒數(shù)部分,Instant.getNano() 獲取納秒部分。

? Instant 的操作

加減:plus(), minus()

相互比較:isAfter(), isBefore()

獲得時(shí)間差:until()

下面是幾個(gè)例子:

Instant instant1 = Instant.now();
Instant instant2 = instant1.plus(Duration.ofSeconds(100));        // 添加 100 秒
System.out.println(instant2.isAfter(instant1));                   // true
System.out.println(instant1.until(instant2, ChronoUnit.SECONDS)); // 100
? 將 Instant 轉(zhuǎn)換成完整的時(shí)間

這部分將在后面介紹。

二、本地日期 / 本地時(shí)間 / 本地日期時(shí)間
LocalDate/LocalTime/LocalDateTime

LocalDate 表示年月日,其精確度到天。它是不包含時(shí)分秒的。

LocalTime 表示一天當(dāng)中的時(shí)間,其精確度到納秒。它是不包含年月日的。

LocalDateTime 既包含日期也包含時(shí)間,但是不包含時(shí)區(qū)。它實(shí)際上就是 LocalDateLocalTime 的組合。

? 創(chuàng)建 LocalDate/LocalTime/LocalDateTime 對(duì)象

這三個(gè)類都有下面的幾個(gè)靜態(tài)方法來(lái)創(chuàng)建對(duì)象:

now() 表示當(dāng)前時(shí)間或日期的對(duì)象;

of() 使用指定的值來(lái)創(chuàng)建;

parse() 通過(guò)解析字符串來(lái)創(chuàng)建。

此外一個(gè) LocalDate 對(duì)象和一個(gè) LocalTime 對(duì)象可以組合為一個(gè) LocalDateTime 對(duì)象。

下面是幾個(gè)例子:

LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.of(2018, 3, 5);
LocalDateTime localDateTime = LocalDateTime.parse("2018-03-05T12:34:56");

// 下面兩句是等價(jià)的
LocalDateTime localDateTime1 = localDate.atTime(localTime);
LocalDateTime localDateTime2 = localTime.atDate(localDate);

此外它們還有各自的創(chuàng)建對(duì)象的靜態(tài)方法,具體請(qǐng)參考 API 文檔。

到了這里你可能發(fā)現(xiàn) LocalDateTimeInstance 本質(zhì)上是一樣的,都表示一個(gè)全局跨度內(nèi)的一個(gè)時(shí)間點(diǎn)。那么兩者是否可以互換呢?很可惜,不能直接互換。

因?yàn)?LocalDateTime 沒(méi)有帶時(shí)區(qū),而 Instance 的時(shí)間戳是統(tǒng)一以格林尼治時(shí)間為準(zhǔn)的,所以相同的 LocalDateTime 在不同時(shí)區(qū)的 EPOCH 時(shí)間戳不同,轉(zhuǎn)換的時(shí)候必須附加一個(gè)時(shí)區(qū)。下面是例子:

// LocalDateTime -> Instant
Instant instant = Instant
        .from(LocalDateTime.now().atZone(ZoneId.systemDefault()));
        
// 或者
Instant instant = Instant.from(ZonedDateTime.now());

// Instant -> LocalDateTime
LocalDateTime localDateTime = LocalDateTime
        .ofInstant(Instant.now(), ZoneId.systemDefault()); 
三、時(shí)長(zhǎng) Duration/Period

Duration 表示以秒為單位的時(shí)長(zhǎng),精確到納秒。Period 表示以天為單位的時(shí)長(zhǎng),精確到天。

? 創(chuàng)建 Duration/Period

有三類方法可以創(chuàng)建時(shí)長(zhǎng)對(duì)象:

of() 通過(guò)指定的值來(lái)創(chuàng)建;

parse() 通過(guò)解析字符串來(lái)創(chuàng)建;

between() 通過(guò)兩個(gè)時(shí)間點(diǎn)來(lái)創(chuàng)建。

下面是幾個(gè)例子:

Duration duration1 = Duration.between(Instant.EPOCH, Instant.now());
Duration duration2 = Duration.between(LocalTime.parse("00:00:01"), LocalTime.now());
Period period1 = Period.parse("P1Y2M3D");  // 表示一年兩個(gè)月零三天
Period period2 = Period.of(1, 2, 3);       // 同上

注意時(shí)長(zhǎng)可以為負(fù)數(shù)。

之前說(shuō)過(guò),一個(gè) Instant 加上一個(gè)時(shí)長(zhǎng)可以得到另一個(gè) Instant。下面是個(gè)例子:

Instant then = Instant.now().plus(period);
? 時(shí)長(zhǎng)的操作

時(shí)長(zhǎng)與時(shí)長(zhǎng)可以加減。例如 Period period2 = period1.plus(Period.ofDays(1)); 表示 period1 加上一天。

一個(gè)時(shí)間點(diǎn)加上一個(gè)時(shí)長(zhǎng)可以得到另一個(gè)時(shí)間點(diǎn)。例如 LocalDateTime time = LocalDateTime.now().plus(period);

? 時(shí)長(zhǎng)的單位

這里必須注意的一點(diǎn)是,DurationPeriod 的值不是單個(gè)數(shù)字,而是多個(gè)單位的組合,像 Period 是年月日的組合,比如 “1年零3個(gè)月零5天”,你不能把它看作是 (1 x 365 + 3 x 30 + 5) 天,因?yàn)檫@里可能有閏年和非閏年的區(qū)別。所以 Period.ofYears(1) 是無(wú)法轉(zhuǎn)換為天數(shù)的。

四、時(shí)間單位轉(zhuǎn)換

當(dāng)我們要具體計(jì)算兩個(gè)時(shí)間點(diǎn)之間的秒數(shù)或天數(shù),該怎么辦呢?這里有一個(gè)叫 ChronoUnit 的類。下面是幾個(gè)例子:

// 離那個(gè)什么中華民族的偉大復(fù)興還有多少天
long days = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.of(2049, 10, 1));

其實(shí) Java 8 的這套時(shí)間 API 比之前的 Date 和 Calendar 都要好懂得多,稍微練習(xí)一下就可以運(yùn)用自如。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68665.html

相關(guān)文章

  • Spring Framework 參考文檔(概述)

    摘要:除此之外,還為不同的應(yīng)用程序體系結(jié)構(gòu)提供了基礎(chǔ)支持,包括消息傳遞事務(wù)數(shù)據(jù)和持久性以及,它還包括基于的框架,以及與之并行的反應(yīng)性框架。還支持依賴項(xiàng)注入和公共注解規(guī)范,應(yīng)用程序開發(fā)人員可以選擇使用這些規(guī)范,而不是提供的特定于的機(jī)制。 概述 Spring使創(chuàng)建Java企業(yè)應(yīng)用程序變得很容易,它提供了在企業(yè)環(huán)境中使用Java語(yǔ)言所需要的一切,支持Groovy和Kotlin作為JVM上的替代語(yǔ)言...

    silencezwm 評(píng)論0 收藏0
  • Android程序員完全沒(méi)時(shí)間提升自己怎么辦?

    摘要:昨天有個(gè)小學(xué)弟給我發(fā)來(lái)微信,說(shuō)他現(xiàn)在有點(diǎn)后悔選擇開發(fā)了,月月光不說(shuō),還加班特別嚴(yán)重,平時(shí)也沒(méi)有屬于自己的時(shí)間去學(xué)習(xí),問(wèn)我剛畢業(yè)的時(shí)候是不是這樣。每天回到出租屋都是倒頭就睡,非常累,也沒(méi)有其他時(shí)間提升自己的技術(shù)。 昨天有個(gè)小學(xué)弟給我發(fā)來(lái)微信,說(shuō)他現(xiàn)在有點(diǎn)后悔選擇Android開發(fā)了,月月光不說(shuō)...

    kohoh_ 評(píng)論0 收藏0
  • Spring Boot 2 快速教程:WebFlux 快速入門(二)

    摘要:響應(yīng)式編程是基于異步和事件驅(qū)動(dòng)的非阻塞程序,只是垂直通過(guò)在內(nèi)啟動(dòng)少量線程擴(kuò)展,而不是水平通過(guò)集群擴(kuò)展。三特性常用的生產(chǎn)的特性如下響應(yīng)式編程模型適用性內(nèi)嵌容器組件還有對(duì)日志消息測(cè)試及擴(kuò)展等支持。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 02:WebFlux 快速入門實(shí)踐 文章工程: JDK...

    gaara 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<