統一使用java.time.*包下的類
1、獲取當前的日期、時間、日期加時間
LocalDate todayDate = LocalDate.now(); //今天的日期 LocalTime now = LocalTime.now(); //此刻的時間--精確到毫秒 LocalDateTime now = LocalDateTime.now(); //此刻時間--年-月-日-時-分-秒-毫秒
2、獲取單獨年日月時分秒
LocalDateTime now = LocalDateTime.now(); System.out.println("年:"+now.getYear()); System.out.println("月:"+now.getMonthValue()); System.out.println("日:"+now.getDayOfMonth()); System.out.println("時:"+now.getHour()); System.out.println("分:"+now.getMinute()); System.out.println("秒:"+now.getSecond()); System.out.println("該日期是該年的第"+now.getDayOfYear()+"天");
3、將特定的時間轉成LocalDate、LocalTime、LocalDateTime 都有很多的重載的方法
LocalDate of1 = LocalDate.of(2019, 1, 16); System.out.println(of1); LocalTime of2 = LocalTime.of(9, 25, 36); System.out.println(of2); LocalDateTime of3 = LocalDateTime.of(of1, of2); System.out.println(of3); LocalDateTime of4 = LocalDateTime.of(2019, 1, 14, 9, 26, 25); System.out.println(of4);
4、判斷時間是否相等(日期、時間、日期加時間)時間的比較精確到納秒,可以先將時間進行格式化,然后比較,可以控制精度問題
// 日期 LocalDate date1 = LocalDate.of(2019, 1, 17); LocalDate date2 = LocalDate.now(); if (date1.equals(date2)) { System.out.println("日期相等"); } else { System.out.println("日期不相等"); } // 時間 LocalTime date1 = LocalTime.of(9, 46); LocalTime date2 = LocalTime.now(); if (date1.equals(date2)) { System.out.println("時間相等"); } else { System.out.println("時間不相等"); } // 時間加日期 LocalDateTime date1 = LocalDateTime.of(2019,1,17,9,47); LocalTime date2 = LocalTime.now(); if (date1.equals(date2)) { System.out.println("時間加日期相等"); } else { System.out.println("時間加日期不相等"); }
5、檢查周幾這種周期性的事件
DayOfWeek of = DayOfWeek.THURSDAY; DayOfWeek from = DayOfWeek.from(LocalDate.now()); if (from.equals(of)) { System.out.println("今天是周四"); } else { System.out.println("今天不是周四"); } DayOfWeek from1 = DayOfWeek.from(LocalDate.of(2019, 1, 10)); if (from1.equals(of)) { System.out.println("該日期是周四"); } else { System.out.println("該日期不是周四"); }
6、指定時間之后或之前XXX的時間
LocalDateTime now = LocalDateTime.now(); System.out.println("當前時間"+now); System.out.println("當前時間之前2天:"+now.minusDays(2)); System.out.println("當前時間之后2天:"+now.plusDays(2)); System.out.println("當前時間之前2周:"+now.minusWeeks(2)); System.out.println("當前時間之后2周:"+now.plusWeeks(2)); System.out.println("當前時間之前2月:"+now.minusMonths(2)); System.out.println("當前時間之后2月:"+now.plusMonths(2)); System.out.println("當前時間之前2年:"+now.minusYears(2)); System.out.println("當前時間之后2年:"+now.plusYears(2)); System.out.println("當前時間之前2小時:"+now.minusHours(2)); System.out.println("當前時間之后2小時:"+now.plusHours(2)); System.out.println("當前時間之前2分鍾:"+now.minusMinutes(2)); System.out.println("當前時間之后2分鍾:"+now.plusMinutes(2)); System.out.println("當前時間之前2秒:"+now.minusSeconds(2)); System.out.println("當前時間之后2秒:"+now.plusSeconds(2));
7、比較時間的先后
LocalDateTime now = LocalDateTime.now(); System.out.println("當前時間:"+now); LocalDateTime appointTime = LocalDateTime.of(2019, 1, 17, 9, 32, 12); System.out.println("指定時間:"+appointTime); System.out.println(now.isAfter(appointTime)); System.out.println(now.isBefore(appointTime));
8、格式化時間格式及按照一定格式解析
LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("HH:mm:ss"); //格式化 String format = now.format(formatter); String format2 = now.format(formatter2); String format3 = now.format(formatter3); System.out.println("格式化1:" + format); System.out.println("格式化2:" + format2); System.out.println("格式化3:" + format3); //解析 LocalDateTime localDateTime = LocalDateTime.parse(format, formatter); LocalDate localDate = LocalDate.parse(format2, formatter2); LocalTime localTime = LocalTime.parse(format3, formatter3); System.out.println("解析1:" + localDateTime); System.out.println("解析2:" + localDate); System.out.println("解析3:" + localTime);
9、根據指定的毫秒數獲取LocalDateTime對象
Long nowMilli = new Date().getTime(); LocalDateTime localDateTime = Instant.ofEpochMilli(nowMilli).atZone(ZoneId.of("+8")).toLocalDateTime(); System.out.println(localDateTime);
注:+8 表示東八區,即常說的北京時間
10、通過LocalDateTime對象獲取毫秒數
LocalDateTime now = LocalDateTime.now(); long l = now.atZone(ZoneId.of("+8")).toInstant().toEpochMilli(); System.out.println(l);
注:+8 表示東八區,即常說的北京時間
11、通過LocalDateTime對象獲取秒數
LocalDateTime now = LocalDateTime.now(); long second = now.toEpochSecond(ZoneOffset.of("+8")); System.out.println(second);
注:+8 表示東八區,即常說的北京時間
12、判斷指定日期是否是閏年(只LocalDate)
LocalDate now = LocalDate.now(); if (now.isLeapYear()) { System.out.println("now是閏年"); } else { System.out.println("now不是閏年"); }
13、使用默認格式解析時間(LocalDateTime對象可解析的格式yyyy-MM-ddTHH:mm:ss)--不是空格了,是T
LocalDateTime dateTime = LocalDateTime.parse("2019-01-14T12:04:12"); int monthValue = dateTime.getMonthValue(); int minute = dateTime.getMinute(); System.out.println(monthValue+":"+minute); LocalTime time = LocalTime.parse("19:14:25"); int hour = time.getHour(); System.out.println(hour); LocalDate date = LocalDate.parse("2019-01-12"); int year = date.getYear(); System.out.println(year);
14、總結
jdk8中提供三個類(LocalDate,LocalTime,LocalDateTime),它們分別對年月日、時分秒和年月日時分秒進行單獨的處理,使用時可以根據自己的實際情況進行選擇,它們的API類似。
Date與LocalDateTime、LocalDate、LocalTime互轉參考: https://www.cnblogs.com/exmyth/p/6425878.html