Java8的日期新介面LocalDate
阿新 • • 發佈:2019-02-14
Java8裡,把日期和時間類進行了優化:
LocalDate / LocalDateTime 的功能幾乎是java.util.Date + java.sql.Date + java.util.Calendar + SimpleDateFormate之和:
這兩個包在java.time下,所有的日期或時間都在這個包裡搞定,是時候仍掉老一套日期了,原來每個專案都少不了DateUtil,也可以仍掉了。
不說了,直接貼程式碼。
不管是日期初始化、格式化、還是日期加減,都灰常簡潔,
父親節這樣複雜的日期也一行程式碼搞定:
LocalDate 當前日期 = LocalDate.now(); LocalDate 分年月日分別指定日期 = LocalDate.of(2018, 07, 01);// 所見即所得,2018-07-01,可以與Calendar類對比 Calendar cal = Calendar.getInstance(); cal.set(2018, 07, 01); // 注意:通過Calendar建立的日期,月份是要從零開始的,因此這個是2018年8月1日,不是7月1日 LocalDate 預設iso方式的日期 = LocalDate.parse("2018-07-01"); // 按照ISO 8601 yyyy-MM-dd格式驗證,02不能寫成2 LocalDate 沒有中劃線的日期 = LocalDate.parse("20180701", DateTimeFormatter.BASIC_ISO_DATE); LocalDate 斜槓方式的日期 = LocalDate.parse("2018/07/03", DateTimeFormatter.ofPattern("yyyy/MM/dd")); // 自定義格式 LocalDate 某年某月某日 = LocalDate.parse("2018年07月31日", DateTimeFormatter.ofPattern("yyyy年MM月dd日")); // 自定義格式 LocalDate 獲取20天之後的日期 = LocalDate.now().plusDays(20); LocalDate 獲取1個月後的日期 = LocalDate.now().plusMonths(1); LocalDate 獲取1周前的日期 = LocalDate.now().minusWeeks(1); LocalDate 獲取2017年5月12日之後一年的日期 = LocalDate.parse("2017-05-12").plusYears(1); // 6月的第3個週日是父親節,獲取父親節日期:先定位到今年的6月第1天,再把日期調整到第一個星期日,再加兩週 LocalDate 今年的父親節日期 = LocalDate.of(LocalDate.now().getYear(), Month.JUNE, 1) .with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)).plusWeeks(2); // 生日 LocalDate date = LocalDate.of(1949, 10, 01); MonthDay 生日 = MonthDay.of(date.getMonth(), date.getDayOfMonth()); // MonthDay只儲存了月日,天然適合節日、生日的判斷 MonthDay 當前月日 = MonthDay.from(LocalDate.now()); if (當前月日.equals(生日)) { System.out.println("今天是你的生日啦"); } else { System.out.println("今天不是你的生日"); } LocalDate after30Days = LocalDate.now().plusDays(30); // 當前日期的30天之後,如當前時間:2018-07-17,則輸出值為2018-08-16 LocalDate afterOneMonth = LocalDate.now().plusMonths(1); // 當前日期的1個月後,如當前時間:2018-07-17,2018-08-17 LocalDate afterOneMonth2 = LocalDate.of(2018, 01, 30).plusMonths(1); // 2018-01-29之後的30天 LocalDate beforeOneWeek = LocalDate.now().plusWeeks(1); // 一個星期後 LocalDate nextMontFirstDay = LocalDate.now().plusMonths(-1).withDayOfMonth(1); // 上個月的第一天 ,屯minusMonths(1)相同 LocalDate 下個月的最後一天 = LocalDate.now().plusMonths(1).withDayOfMonth(Month.AUGUST.maxLength());