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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!