Java8 新的日期和時間 API
時間線
在 Java 當中,一個 Instant 對象表示時間軸上的一個點。并且我們可以計算兩個時間點之間的時間量。
@Test public void test1() throws Exception { // Instant.now() 獲取當前時間瞬時點 Instant begin = Instant.now(); System.out.println(begin); Thread.sleep(200); Instant end = Instant.now(); System.out.println(end);// Duration表示兩個瞬時點之間的持續時間 Duration duration = Duration.between(begin, end); System.out.println(duration.toMillis()); // 可以對 Duration 和 Instant 進行數學操作 System.out.println(end.plusSeconds(20)); System.out.println(duration.plusMillis(500).toMillis()); }</pre><br />
本地日期
本地日期/時間表示一個日期或時間,但是不關聯任何時區信息。
@Test public void test2() { // LocalDate.now() 獲取本地今天日期 LocalDate localDate = LocalDate.now(); System.out.println(localDate); // LocalDate.of() 創建日期 2015-12-22 LocalDate localDate2 = LocalDate.of(2015, 12, 22); System.out.println(localDate2); System.out.println(localDate2.plusDays(1)); System.out.println(localDate.isBefore(localDate2)); LocalDate localDate3 = localDate2.plus(Period.ofDays(3)); System.out.println(localDate.isBefore(localDate3)); System.out.println(localDate2.until(localDate3, ChronoUnit.DAYS));//返回兩個本地日期時間的距離 System.out.println(localDate3.getDayOfWeek());//星期幾 }兩個瞬時點 Instant 之間的距離就是一個持續時間 Duration。對于本地日期對應的對象就是時段 Period。
日期校正器
如果我們需要進行調度,例如每個月的第一個周二這樣的日期。 TemporalAdjusters 類提供了很多靜態方法來進行常用的校正。
@Test public void test3() { LocalDate localDate = LocalDate.of(2015, 1, 1).with( TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY));// 從指定日期開始的后一個星期幾 System.out.println(localDate); LocalDate localDate2 = localDate.with(TemporalAdjusters.previous(DayOfWeek.TUESDAY));// 指定日期的前一個星期幾 LocalDate localDate3 = localDate.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));// 指定日期的后一個星期幾 System.out.println(localDate2); System.out.println(localDate3); LocalDate localDate4 = localDate.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.TUESDAY));// 第三個周二 System.out.println(localDate4); LocalDate localDate5 = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.TUESDAY)); System.out.println(localDate5);TemporalAdjuster Next_WorkDay = w -> {//自定義校正器 LocalDate resultDate = (LocalDate) w; do { resultDate = resultDate.plusDays(1); } while (resultDate.getDayOfWeek().getValue() >= 6); return resultDate; }; }</pre><br />
本地時間
LocalTime 表示一天當中的某個時間,例如 15:00.
@Test public void test4() { LocalTime localTime = LocalTime.now(); LocalTime localTime2 = LocalTime.of(12, 24); System.out.println(localTime); System.out.println(localTime2); // 其他 api 與 LocalDate 類似 LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime localDateTime2 = LocalDateTime.of(2015, 12, 22, 3, 14, 23); System.out.println(localDateTime); System.out.println(localDateTime2); // 其他 api 與 LocalDate 類似 }
格式化和解析
DateTimeFormatter 提供了三種格式化的方法來打印日期:
- 預定義的標準格式
- 語言相關的格式
- 自定義格式
</ol>@Test public void test5() { LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(localDateTime));// 預定義標準格式 System.out.println(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime));// 預定義標準格式System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .format(localDateTime));// 語言相關格式 System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).format( localDateTime));// 語言相關格式 System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).format( localDateTime));// 語言相關格式 System.out.println(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).format( localDateTime));// 語言相關格式,一般使用這個 System.out .println(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(localDateTime));// 自定義 }</pre><br />
遺留代碼操作
Instant 類似于 java.util.Date 類,在 java8 當中 java.util.Date 新增兩個方法:toInstant,還有 from 方法來相互轉換。
【參考資料】
- 寫給大忙人看的Java SE 8
</ol>---EOF---
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!