1. 程式人生 > >Date-Time API簡介

Date-Time API簡介

  Date-Time API簡介
  
  在Java8之前的版本中,我們處理時間型別常常使用的是java.util包下的Date類。但使用Date類卻有諸多的弊端,如: java.util.Date 是非執行緒安全的,所有的日期類都是可變的;日期/時間類的定義並不一致,在java.util和java.sql的包下都含有Date類,在開發過程中極易出錯; 日期類並不提供國際化,沒有時區支援。為了解決以上問題,Java8在java.time 包下提供了很多新的 API,常用的類包括LocalDate、LocalTime、LocalDateTime,用以處理日期,時間,日期/時間等
  
  LocalDate類
  
  LocalDate是一個不可變類,在不考慮時區的情況下可以對日期(不包括時間)進行各種操作,它的預設格式是yyyy-MM-dd
  
  獲取當前日期以及年、月、日
  
  程式碼示例:
  
  //獲取當前日期以及年、月、日
  
  LocalDate localDate = LocalDate.now();
  
  int year = localDate.getYear();
  
  int month = localDate.getMonthValue();
  
  int day = localDate.getDayOfMonth();
  
  System.out.println("當前日期:" + localDate);
  
  System.out.println("年:" + year + "  月:" + month + "  日:" + day);
  
  執行結果:
  
  當前日期:2018-12-12
  
  年:2018  月:12  日:12
  
  獲取指定的日期
  
  程式碼示例:
  
  //獲取指定的日期
  
  LocalDate specifiedDay = LocalDate.of(2008, 8, 18);
  
  System.out.println("指定日期:" + specifiedDay);
  
  執行結果:
  
  指定日期:2008-08-18
  
  比較兩個時間的先後順序以及是否相等
  
  程式碼示例:
  
  LocalDate localDate = LocalDate.now();
  
  LocalDate otherDate = LocalDate.of(2018, 11, 11);
  
  //equals方法用於比較兩個日期是否相等
  
  if(localDate.equals(otherDate)) {
  
  System.out.println("localDate與otherDate相等!");
  
  } else {
  
  //isAfter和isBefore方法用於比較兩個日期前後順序
  
  if(localDate.isAfter(otherDate)) {
  
  System.out.println("localDate晚於otherDate!");
  
  }
  
  if(localDate.isBefore(otherDate)) {
  
  System.out.println("localDate早於otherDate!");
  
  }
  
  }
  
  執行結果:
  
  localDate晚於otherDate!
  
  對日期做加減運算
  
  程式碼示例:
  
  LocalDate localDate www.quwanyule157.com= LocalDate.now();
  
  System.out.println("2年後日期:" + localDate.plusYears(2));
  
  System.out.println("6月後日期:" + localDate.plusMonths(6));
  
  System.out.println("3周後日期:" + localDate.plusWeeks(3));
  
  System.out.println("15天后日期:" + localDate.plusDays(15));
  
  System.out.println("2年前日期:" + localDate.minusYears(2));
  
  System.out.println("6月前日期:" + localDate.minusMonths(6));
  
  System.out.println("3周前日期:" + localDate.minusWeeks(3));
  
  System.out.println("15天前日期:" + localDate.minusDays(15));
  
  執行結果:
  
  2年後日期:2020-12-12
  
  6月後日期:2019-06-12
  
  3周後日期:2019-01-02
  
  15天后日期:2018-12-27
  
  2年前日期:2016-12-12
  
  6月前日期:2018-06-12
  
  3周前日期:2018-11-21
  
  15天前日期:2018-11-27
  
  獲取日期間隔的天數
  
  程式碼示例:
  
  //獲取某年份的第N天的日期
  
  LocalDate specialDay = LocalDate.ofYearDay(2018, 100);
  
  System.out.println("2018年的第100天:" + specialDay);
  
  //獲取兩個日期的間隔天數
  
  long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay();
  
  System.out.println("間隔天數: "www.gcyL157.com + intervalDay);
  
  執行結果:
  
  2018年的第100天:2018-04-10
  
  間隔天數:246
  
  LocalTime類
  
  LocalTime與LocalDate一樣,也是一個不可變的類,預設格式是hh:mm:ss.zzz,它提供了對時間的各種操作
  
  獲取當前時間以及自定義時間
  
  程式碼示例:
  
  //獲取當前時間、時、分、秒以及自定義時間
  
  LocalTime localTime = LocalTime.now();
  
  int hour = localTime.getHour();
  
  int minute = localTime.getMinute();
  
  int second = localTime.getSecond();
  
  System.out.println("當前時間:" +www.mcyllpt.com/  localTime);
  
  System.out.println("時:" + hour + "  分:" + minute + "  秒:" + second);
  
  //獲取自定義時間
  
  LocalTime specifiedTime = LocalTime.of(15, 30, 45);
  
  System.out.println("自定義時間:" + specifiedTime);
  
  執行結果:
  
  當前時間:13:45:59.039
  
  時:13  分:45  秒:59
  
  自定義時間:15:30:45
  
  比較兩個時間的先後順序
  
  程式碼示例:
  
  //equals方法比較兩個時間是否相等
  
  if(localTime.equals(specifiedTime)) {
  
  System.out.println(www.meiwanyule.cn"localTime與specifiedTime相等!");
  
  } else {
  
  //isAfter、isBefore方法比較兩個時間的先後順序
  
  if(localTime.isAfter(specifiedTime)) {
  
  System.out.println("localTime晚於specifiedTime!");
  
  }
  
  if(localTime.isBefore(specifiedTime)) {
  
  System.out.println("localTime早於specifiedTime!");
  
  }
  
  }
  
  執行結果:
  
  localTime早於specifiedTime!
  
  對時間做加減運算
  
  程式碼示例:
  
  LocalTime localTime = LocalTime.now();
  
  System.out.println("當前時間:" + localTime);
  
  System.out.println("2小時後時間:" + localTime.plusHours(2));
  
  System.out.println("30分鐘後時間:" + localTime.plusMinutes(30));
  
  System.out.println("500秒後日時間:" + localTime.plusSeconds(500));
  
  System.out.println("2小時前時間:" + localTime.minusHours(2));
  
  System.out.println("30分鐘前時間:" + localTime.minusMinutes(30));
  
  System.out.println("500秒前時間:" + localTime.minusSeconds(500));
  
  執行結果:
  
  當前時間:14:10:15.666
  
  2小時後時間:16:10:15.666
  
  30分鐘後時間:14:40:15.666
  
  500秒後時間:14:18:35.666
  
  2小時前時間:12:10:15.666
  
  30分鐘前時間:13:40:15.666
  
  500秒前時間:14:01:55.666
  
  LocalDateTime類
  
  LocalDateTime是一個不可變的日期-時間物件,它既包含了日期同時又含有時間,預設格式是yyyy-MM-ddTHH-mm-ss.zzz
  
  獲取當前日期時間以及自定義日期時間
  
  示例程式碼:
  
  //獲取當前的日期時間
  
  LocalDateTime localDateTime = LocalDateTime.now();
  
  System.out.println("當前的日期時間:" + localDateTime);
  
  //獲取自定義的的日期時間
  
  LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
  
  System.out.println("自定義的日期時間:" + specifiedDateTime);
  
  執行結果:
  
  當前的日期時間:2018-12-12T14:31:00.163
  
  自定義的日期時間:2018-12-12T14:31:00.164
  
  轉化為日期和時間
  
  程式碼示例:
  
  //轉化為LocalDate和LocalTime
  
  LocalDate localDate = localDateTime.toLocalDate();
  
  LocalTime localTime = localDateTime.toLocalTime();
  
  System.out.println("當前日期:" + localDate);
  
  System.out.println("當前時間:" + localTime);