Java SE Java8的新日期API CAMELLIA 2024-06-07 2024-06-07 !!! note 目录
Java8的新日期API 一、LocalDate日期、LocalTime时间、LocalDateTime日期时间
方法都一样,以LocalDateTime举例讲解
1.1 获取当前时间(精确到纳秒)
1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
1 2 3 4 5 6 @Test public void testLocalDateTimeNow () { LocalDateTime now = LocalDateTime.now(); System.out.println(now); }
1.2获取指定日期时间 1 2 3 4 5 6 @Test public void testLocalDateTimeOf () { LocalDateTime localDateTime = LocalDateTime.of(2020 , 7 , 7 , 9 , 1 , 1 , 1 ); System.out.println(localDateTime); }
1.3 加日期时间 1 2 3 4 5 6 @Test public void testLocalDateTimePlus () { LocalDateTime now = LocalDateTime.now(); LocalDateTime localDateTime = now.plusYears(2 ).plusMonths(6 ).plusDays(1 ).plusHours(0 ).plusMonths(0 ).plusSeconds(0 ).plusNanos(0 ); System.out.println(localDateTime); }
这里涉及了链式调用:now.plusYears(2).plusMonths(6).plusDays(1).plusHours(0).plusMonths(0).plusSeconds(0).plusNanos(0); 因为这几个方法返回LocalDateTime
,所以可以这么调用。 在编写程序时可以参考此原理。
1.4 减日期时间 1 2 3 4 5 6 @Test public void testLocalDateTimeMinus () { LocalDateTime now = LocalDateTime.now(); LocalDateTime localDateTime = now.minusYears(2 ).minusMonths(6 ).minusDays(1 ).minusHours(0 ).minusMonths(0 ).minusSeconds(0 ).minusNanos(0 ); System.out.println(localDateTime); }
二、Instant时间戳(获取1970年1月1日 0时0分0秒到某个时间的时间戳) 1 2 3 4 5 6 7 8 9 10 11 12 @Test public void testInstant () { long l = System.currentTimeMillis(); System.out.println("时间戳:" +l); Instant now = Instant.now(); System.out.println(now); long epochMilli = now.toEpochMilli(); System.out.println("时间戳:" +epochMilli); }
三、Duration计算时间间隔 1 2 3 4 5 6 7 8 9 10 11 @Test public void testDuration () { LocalDateTime time1 = LocalDateTime.of(2020 , 1 , 1 , 0 , 0 , 0 , 0 ); LocalDateTime time2 = LocalDateTime.of(2024 , 1 , 1 , 0 , 0 , 0 , 0 ); Duration between = Duration.between(time1, time2); System.out.println("相差多少天:" +between.toDays()); System.out.println("相差多少小时:" +between.toHours()); }
四、Period计算日期间隔 1 2 3 4 5 6 7 8 9 10 @Test public void testPeriod () { LocalDate date1 = LocalDate.of(2020 , 7 , 7 ); LocalDate date2 = LocalDate.of(2024 , 9 , 12 ); Period between = Period.between(date1, date2); System.out.println("差多少年:" +between.getYears()+"\t差多少月:" +between.getMonths()+"\t差多少天" +between.getDays()); }
五、TemporalAdjusters 时间矫正器 5.1 常用的 TemporalAdjusters 方法
**firstDayOfMonth()**:返回该月份的第一个日。
**firstDayOfNextMonth()**:返回下个月的第一个日。
**firstDayOfNextYear()**:返回下一年的第一个日。
**firstDayOfYear()**:返回当前年份的第一个日。
**lastDayOfMonth()**:返回该月份的最后一个日。
**lastDayOfYear()**:返回当前年份的最后一个日。
**next(DayOfWeek dow)**:返回下一个指定的星期。
**previous(DayOfWeek dow)**:返回上一个指定的星期。
**nextOrSame(DayOfWeek dow)**:返回下一个指定的星期,如果今天已经是这个星期,则返回今天。
**previousOrSame(DayOfWeek dow)**:返回上一个指定的星期,如果今天已经是这个星期,则返回今天。
5.2 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import java.time.LocalDate;import java.time.DayOfWeek;import java.time.temporal.TemporalAdjusters;public class TemporalAdjustersExample { public static void main (String[] args) { LocalDate today = LocalDate.now(); LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth()); System.out.println("First day of this month: " + firstDayOfMonth); LocalDate firstDayOfNextMonth = today.with(TemporalAdjusters.firstDayOfNextMonth()); System.out.println("First day of next month: " + firstDayOfNextMonth); LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("Last day of this month: " + lastDayOfMonth); LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println("Next Monday: " + nextMonday); LocalDate previousFriday = today.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY)); System.out.println("Previous Friday: " + previousFriday); LocalDate fridayOrToday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)); System.out.println("Friday or today: " + fridayOrToday); } }
6.1 LocalDateTime –> String 1 2 3 4 5 6 7 8 9 @Test public void testDateTimeFormatter () { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" ); String formatted = dateTimeFormatter.format(now); System.out.println(formatted); }
6.2 String –> LocalDateTime 1 2 3 4 5 6 7 8 @Test public void testDateTimeFormatter () { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" ); LocalDateTime parse = LocalDateTime.parse("2020-07-07 09:00:00" , dateTimeFormatter); System.out.println(parse); }