Java 8之前的库对日期和时间的支持并不理想,为了解决这个问题,Java8引入了一套全新的时间日期API,位于java.time
路径下。
LocalDate
LocalDate date = LocalDate.now();
System.out.println(date);//2021-10-25
System.out.println(date.getYear());//2021
System.out.println(date.getMonth().getValue());//10
System.out.println(date.getDayOfMonth());//25
System.out.println(date.lengthOfMonth());//31
System.out.println(date.lengthOfYear());//365
System.out.println(date.isLeapYear());//false
也可以使用ChronoField
枚举类型来实现相同的功能
int year1 = date.get(ChronoField.YEAR);
int month1 = date.get(ChronoField.MONTH_OF_YEAR);
int day1 = date.get(ChronoField.DAY_OF_MONTH);
// 当前日期属于该月第几周
int weekOfMonth = date.get(ChronoField.ALIGNED_WEEK_OF_MONTH);
也可以修改LocalDate对象
LocalDate date3 = LocalDate.of(2018, 4, 20); // 2018-04-20
LocalDate date4 = date3.withDayOfMonth(22); // 2018-04-22
LocalDate date5 = date3.with(ChronoField.DAY_OF_MONTH, 22); // 2018-04-22
LocalDate date6 = date3.withYear(2019); // 2019-04-20
LocalDate date7 = date3.plusDays(5); // 2018-04-25
LocalDate date8 = date3.plus(5, ChronoUnit.DAYS); // 2018-04-25
LocalDate date9 = date3.minusYears(10); // 2008-04-20
可以对LocalDate进行格式化操作
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String str5 = date.format(dtf); // 2018-04-20
LocalDate date13 = LocalDate.parse(str5, dtf); // 2018-04-20
LocalTime
与LocalDate类似,区别是LocalTime包含的时分秒(毫秒)的信息
可以通过字符串创建
LocalTime time = LocalTime.parse("20:13:54");
以下是它的一些例子
LocalTime time = LocalTime.now();
System.out.println(time);
System.out.println(time.getHour());
System.out.println(time.getMinute());
System.out.println(time.getSecond());
LocalDateTime
LocalDateTime
是LocalDate
和LocalTime
的组合形式,包含了年月日时分秒信息
同理,LocalDate
和LocalTime
也可以转换为它,只需要补上日期或时间
Duration
常用于计算两个LocalTime
的时间差
LocalTime time2 = LocalTime.of(23, 59, 59);
Duration duration = Duration.between(time1, time2);
long seconds = duration.getSeconds(); // 13565
Period
Period
常用于计算两个LocalDate
之间的时长
LocalDate date2 = LocalDate.of(2018, 5, 21);
Period period = Period.between(date1, date2);
int monthsBetween = period.getMonths(); // 1
int daysBetween = period.getDays(); // 1
其他一些常用的方法
LocalDate date15 = LocalDate.of(2018,4,21);
date.isEqual(date15);
date.isAfter(date15);
date.isBefore(date15);