6.Java8新特性 - 時間與日期API
一、時間日期類
Java 8 在java.time
包下提供了很多新的 API。以下為兩個比較重要的 API:
- Local(本地) − 簡化了日期時間的處理,沒有時區的問題。
- Zoned(時區) − 通過制定的時區處理日期時間。
二、本地化時間日期 API
LocalDate
、LocalTime
和LocalDateTime
類可以處理沒有時區問題的情況
- 獲取本地時間
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now(); System.out.println(localDate); System.out.println(localDateTime); System.out.println(localTime); //輸出: 2018-11-03 //2018-11-03T11:48:53.609 //11:48:53.609
- 對時間的操作
LocalDateTime localDateTime = LocalDateTime.now(); //增加5年 LocalDateTime localDateTime1 = localDateTime.plusYears(5); System.out.println(localDateTime1); //減少4個月 LocalDateTime localDateTime2 = localDateTime.minusMonths(4); System.out.println(localDateTime2); //獲取月份 int monthValue = localDateTime.getMonthValue(); System.out.println(monthValue); //獲取周 DayOfWeek dayOfWeek = localDateTime.getDayOfWeek(); System.out.println(dayOfWeek); //獲取年份 int year = localDateTime.getYear(); System.out.println(year); //2023-11-03T15:10:52.405 //2018-07-03T15:10:52.405 //11 //SATURDAY //2018
- 計算間隔
Duration:計算兩個時間之間的間隔
LocalDateTime localDateTime = LocalDateTime.now(); Thread.sleep(500); LocalDateTime localDateTime1 = LocalDateTime.now(); Duration duration = Duration.between(localDateTime,localDateTime1); System.out.println(duration.toMillis()); //輸出:505
Period: 計算兩個日期之間的間隔
LocalDate localDate = LocalDate.now(); LocalDate localDate1 = LocalDate.of(2008,8,8); Period period = Period.between(localDate1,localDate); System.out.println(period.getYears()+":"+period.getMonths()+":"+period.getDays()); //輸出:10:2:26
- 格式化時間或日期
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-mm-dd:hh:mm:ss"); LocalDateTime localDateTime = LocalDateTime.now(); String format = dateTimeFormatter.format(localDateTime); System.out.println(format); //輸出:2018-44-03:03:44:22
三、使用時區的時間日期API
//獲取時區為 Europe/Paris 的時間 LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Europe/Paris")); System.out.println(localDateTime); //組合一個帶有時區的日期 ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Europe/Paris")); System.out.println(zonedDateTime); //獲取當前時區 ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId); //輸出:2018-11-03T08:51:34.629 //2018-11-03T08:51:34.629+01:00[Europe/Paris] //Asia/Shanghai