日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 8新特性 instant

發布時間:2023/12/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 8新特性 instant 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 8目前已經開始進入大眾的視線,其中筆者在寫本文之前,留意到其中Java 8預覽版中將會出現新的關于日期和時間的API(遵守JSR?310規范)。在本系列文章中,將對這些新的API進行舉例說明。首先在本文中,將先介紹以下幾個:Instant,LocalDate,LocalTime 和 LocalDateTime。首先看看 Instant 對象的使用方法:?

1

<code class="hljs lisp">Instant (<span class="hljs-name">java.time.Instant)</span></code>

?

可能 java.time 包中最容易開始學習的內容就是 Instant 這個類。所謂的 Instant 類代表的是某個時間(有點像 java.util.Date),它是精確到納秒的(而不是象舊版本的Date精確到毫秒)。如果使用納秒去表示一個時間則原來使用一位Long類型是不夠的,需要占用更多一點的存儲空間,實際上其內部是由兩個Long字段組成,第一個部分保存的是自標準Java計算時代(就是1970年1月1日開始)到現在的秒數,第二部分保存的是納秒數(永遠不會超過999,999,999)。我們看下一個具體的例子:?

?

1

2

3

4

<code class="hljs kotlin"><span class="hljs-comment">//獲得當前時間

Instant instant = Instant.now();

<span class="hljs-comment">// 以ISO-8601輸出

System.<span class="hljs-keyword">out.println(instant);</span></span></span></code>

在 Open JDK 中運行上面的代碼,可以有如下格式的輸出:2013-06-25T16:22:52.966Z,可以看到,輸入了更為精確的日期。下面的例子是更多的關于 Instant 類的用法,如:?

1

2

3

4

<code class="hljs javascript"><span class="hljs-comment">//將java.util.Date轉換為Instant

Instant instant = Instant.ofEpochMilli(<span class="hljs-keyword">new?<span class="hljs-built_in">Date().getTime());

<span class="hljs-comment">//從字符串類型中創建Instant類型的時間

instant = Instant.parse(<span class="hljs-string">"1995-10-23T10:12:35Z");</span></span></span></span></span></code>

?

注意,在上面的例子中,有壹個字符串中創建 Instant 類型的時間,但 Instant 代表的是一個時間,并不包括時區的概念,所以必須傳入的是符合 UTC格式的字符串。Instant API也提供了一些很有用的方法允許使用Instant 和其他包中的類進行一些運算,下面是例子:?

1

<code class="hljs css"><span class="hljs-selector-tag">instant<span class="hljs-selector-class">.plus(<span class="hljs-selector-tag">Duration<span class="hljs-selector-class">.ofHours(5)<span class="hljs-selector-class">.plusMinutes(4));</span></span></span></span></span></code>

?

以上的代碼表達的含義為,在現在的時間上加上5個小時4分鐘。那么這個例子中,使用了多少個 java.time.Instant 實例呢?答案是兩個。Java.time 這個包是線程安全的,并且和其他大部分類一樣,是不可變類。Instant 也遵守這個規則,因此 plus() 方法會產生一個新的實例,如:?

1

2

<code class="hljs gradle">Instant instant1 = instant.<span class="hljs-keyword">plus(Duration.ofHours(<span class="hljs-number">5).plusMinutes(<span class="hljs-number">4));

System.out.<span class="hljs-keyword">println(<span class="hljs-string">"Instant is immutable, so instant==instant returns: "?+ (instant == instant1));</span></span></span></span></span></code>

?

其輸出為:?

1

<code class="hljs actionscript">Instant <span class="hljs-keyword">is immutable, so instant==instant returns: <span class="hljs-literal">false</span></span></code>

?

下面是更多的關于計算的例子:?

1

2

3

4

5

6

7

<code class="hljs gradle"><span class="hljs-comment">//計算5天前的時間

instant.<span class="hljs-keyword">minus(<span class="hljs-number">5, ChronoUnit.DAYS); <span class="hljs-comment">// Option 1 方法1

instant.<span class="hljs-keyword">minus(Duration.ofDays(<span class="hljs-number">5)); <span class="hljs-comment">// Option 2? 方法2

??????

<span class="hljs-comment">//計算兩個Instant之間的分鐘數

<span class="hljs-keyword">long?diffAsMinutes = instant.periodUntil(instant1, ChronoUnit.MINUTES); <span class="hljs-comment">// 方法1

<span class="hljs-keyword">long?diffAsMinutes = ChronoUnit.MINUTES.between(instant, instant1); <span class="hljs-comment">// 方法2</span></span></span></span></span></span></span></span></span></span></span></span></code>

?

Instant 是可比較的,這意味著可以對兩個 Instant 進行比較。它提供了 isAfter() 和 isBefore() 兩個方法進行比較,如下代碼所示:?

1

2

3

4

5

6

<code class="hljs less"><span class="hljs-comment">//用compareTo方法比較

System<span class="hljs-selector-class">.out<span class="hljs-selector-class">.format(<span class="hljs-string">"instant1.compareTo(instant)=%d.%n", instant1.compareTo(instant));

??????

<span class="hljs-comment">// 使用isAfter()和isBefore()

System<span class="hljs-selector-class">.out<span class="hljs-selector-class">.format(<span class="hljs-string">"instant1.isAfter(instant)=%b, instant1.isBefore(instant)=%b.%n",?

instant1.isAfter(instant), instant1.isBefore(instant))</span></span></span></span></span></span></span></span></code>

?

其輸出結果為:?

1

2

<code class="hljs gradle">instant1.<span class="hljs-keyword">compareTo(instant)=<span class="hljs-number">1.

instant1.isAfter(instant)=<span class="hljs-keyword">true, instant1.isBefore(instant)=<span class="hljs-keyword">false</span></span></span></span></code>

?

Localdate 和 LocalTime

LocalDate 表示不帶時區的日期,比如 1-1-2000。LocalTime 表示不帶時區的時間,比如 04:44:50.12,和之前提到的 Instant 類是從1970年計算偏移量不同,這兩個類的輸出是人們習慣閱讀的日期和時間。有很多種方法去獲得 LocalTime 和 LocalDate 的實例,如:?

1

2

3

4

5

6

<code class="hljs bash">LocalDate <span class="hljs-built_in">localDate = LocalDate.now();

<span class="hljs-built_in">localDate = LocalDate.ofYearDay(2005, 86); // 獲得2005年的第86天 (27-Mar-2005)

<span class="hljs-built_in">localDate = LocalDate.of(2013, Month.AUGUST, 10); //2013年8月10日

LocalTime <span class="hljs-built_in">localTime = LocalTime.of(22, 33); //10:33 PM

<span class="hljs-built_in">localTime = LocalTime.now();

<span class="hljs-built_in">localTime = LocalTime.ofSecondOfDay(4503); // 返回一天中的第4503秒 (1:15:30 AM)</span></span></span></span></span></span></code>

?

LocalDate 和 LocalTime 和 Instant 一樣遵守同樣的線程規定―― 如它們的實例子都是不可變的。LocalDate 和 LocalTime 和 Instant 有同樣的計算和比較方法(其中有些方法是在 java.time.temporal.Temporal接口中定義的,并且上面這些類都實現了這些方法):?

1

2

<code class="hljs bash">LocalDate <span class="hljs-built_in">localDate1 = <span class="hljs-built_in">localDate.plus(5, ChronoUnit.HOURS);

<span class="hljs-built_in">localDate.isBefore(<span class="hljs-built_in">localDate1);</span></span></span></span></code>

?

LocalDateTime

最后來看下在簡單日期和時間類中最重要的一個:LocalDataTeime。它是LocalDate和LocalTime的組合體,表示的是不帶時區的 日期及時間??瓷先?#xff0c;LocalDateTime和Instant很象,但記得的是“Instant中是不帶時區的即時時間點??赡苡腥苏f,即時的時間點 不就是日期+時間么?看上去是這樣的,但還是有所區別,比如LocalDateTime對于用戶來說,可能就只是一個簡單的日期和時間的概念,考慮如下的 例子:兩個人都在2013年7月2日11點出生,第一個人是在英國出生,而第二個是在加尼福利亞,如果我們問他們是在什么時候出生的話,則他們看上去都是 在同樣的時間出生(就是LocalDateTime所表達的),但如果我們根據時間線(如格林威治時間線)去仔細考察,則會發現在出生的人會比在英國出生的人稍微晚幾個小時(這就是Instant所表達的概念,并且要將其轉換為UTC格式的時間)。除此之外,LocalDateTime 的用法和上述介紹的其他類都很相似,如下例子所示:?

1

2

3

4

5

6

7

8

9

<code class="hljs bash">LocalDateTime <span class="hljs-built_in">localDateTime = LocalDateTime.now();

//當前時間加上25小時3分鐘

LocalDateTime <span class="hljs-keyword">inTheFuture = <span class="hljs-built_in">localDateTime.plusHours(25).plusMinutes(3);

// 同樣也可以用在<span class="hljs-built_in">localTime和<span class="hljs-built_in">localDate中

System.out.println(<span class="hljs-built_in">localDateTime.toLocalTime().plusHours(25).plusMinutes(3));

System.out.println(<span class="hljs-built_in">localDateTime.toLocalDate().plusMonths(2));

// 也可以使用實現TemportalAmount接口的Duration類和Period類

System.out.println(<span class="hljs-built_in">localDateTime.toLocalTime().plus(Duration.ofHours(25).plusMinutes(3)));

System.out.println(<span class="hljs-built_in">localDateTime.toLocalDate().plus(Period.ofMonths(2)));</span></span></span></span></span></span></span></span></span></code>

總結

以上是生活随笔為你收集整理的java 8新特性 instant的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。