JDK8新特性里提供了3个时间类:LocalDate、LocalTime、LocalDateTime

日期管件类

Instant:瞬时时间。
LocalDate:本地日期,不包含具体时间, 格式 yyyy-MM-dd。
LocalTime:本地时间,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.SSS 。
LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

LocalDate

LocalDate主要是用来处理日期的类

方法

方法返回类型注释
getYear()int获取当前日期的年份
getMonth()Month获取当前日期的月份对象
getMonthValue()int获取当前日期是第几月
getYear()int获取当前日期的年份
getYear()int获取当前日期的年份
getYear()int获取当前日期的年份
getYear()int获取当前日期的年份
getDayOfWeek()DayOfWeek表示该对象表示的日期是星期几
getDayOfMonth()int表示该对象表示的日期是这个月第几天
getDayOfYear()int表示该对象表示的日期是今年第几天
withYear(int year)LocalDate修改当前对象的年份
withMonth(int month)LocalDate修改当前对象的月份
withDayOfMonth(int dayOfMonth)LocalDate修改当前对象在当月的日期
isLeapYear()boolean是否是闰年
lengthOfMonth()int这个月有多少天
lengthOfYear()int该对象表示的年份有多少天(365或者366)
plusYears(long yearsToAdd)LocalDate当前对象增加指定的年份数
plusMonths(long monthsToAdd)LocalDate当前对象增加指定的月份数
plusWeeks(long weeksToAdd)LocalDate当前对象增加指定的周数
plusDays(long daysToAdd)LocalDate当前对象增加指定的天数
minusYears(long yearsToSubtract)LocalDate当前对象减去指定的年数
minusMonths(long monthsToSubtract)LocalDate当前对象减去注定的月数
minusWeeks(long weeksToSubtract)LocalDate当前对象减去指定的周数
minusDays(long daysToSubtract)LocalDate当前对象减去指定的天数
compareTo(ChronoLocalDate other)int比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚
isBefore(ChronoLocalDate other)boolean比较当前对象日期是否在other对象日期之前
isAfter(ChronoLocalDate other)boolean比较当前对象日期是否在other对象日期之后
isEqual(ChronoLocalDate other)boolean比较两个日期对象是否相等

例子

方法说明举例
LocalDate.now()获取当前日期LocalDate localDate = LocalDate.now();
System.out.println(localDate);
运行结果为:2021-01-07
LocalDate.of(int year, int month, int dayOfMonth)根据参数设置日期,参数分别为年,月,日LocalDate localDate = LocalDate.of(2021,1,7);
System.out.println(localDate);
运行结果为:2021-01-07
localDate.getDayOfMonth()
localDate.getDayOfWeek()
localDate.getDayOfYear()
获取当前日期是所在月的第几天
获取当前日期是星期几(星期的英文全称)
获取当前日期是所在年的第几天 LocalDate localDate = LocalDate.of(2021,1,7);
System.out.println(localDate.getDayOfMonth());
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfYear());
运行结果为:7,MONDAY,7
localDate.getMonth()
localDate.getMonthValue()
localDate.lengthOfMonth()
获取当前日期所在月份(月份的英文全称)
获取当前日期所在月份的数值
获取当前日期所在月份有多少天
LocalDate localDate = LocalDate.of(2021,1,7);
System.out.println(localDate.getMonth());
System.out.println(localDate.getMonthValue());
System.out.println(localDate.lengthOfMonth());
运行结果为:JANUARY,1,31
localDate.lengthOfYear()
localDate.isLeapYear()
获取当前日期所在年有多少天
获取当前日期所在年是否是闰年
LocalDate localDate = LocalDate.of(2021,1,7);
System.out.println(localDate.lengthOfYear());
System.out.println(localDate.isLeapYear());
运行结果为:365,false
localDate.withDayOfMonth(int dayOfMonth)
localDate.withDayOfYear(int dayOfYear)
localDate.withMonth(int month)
localDate.withYear(int year)
with开头的方法,我的理解是将参数替换localDate中的对应
属性,重新计算得到新的日期。
将参数中的"日"替换localDate中的"日"
将参数中的天数替换localDate中的天数
将参数中的"月"替换localDate中的"月"
将参数中的"年"替换localDate中的"年"
LocalDate localDate = LocalDate.of(2021,1,7);
System.out.println(localDate.withDayOfMonth(2));
System.out.println(localDate.withDayOfYear(40));
System.out.println(localDate.withMonth(2));
System.out.println(localDate.withYear(2020));
运行结果为:
2021-01-02,
2021-02-09,
2021-02-07,
2020-01-07
localDate.minusDays(long days)
localDate.minusWeeks(long weeks)
localDate.minusMonths(long months)
localDate.minusYears(long years)
localDate.plusDays(long days)
localDate.plusWeeks(long weeks)
localDate.plusMonths(long months)
localDate.plusYears(long years)
将当前日期减一天
将当前日期减一周
将当前日期减一月
将当前日期减一年
将当前日期加一天
将当前日期加一周
将当前日期加一月
将当前日期加一年

LocalTime

LocalTime主要是用来处理时间的类

例子

方法说明举例
LocalTime.now()获取当前时间LocalTime localTime = LocalTime.now();
System.out.println(localTime);
运行结果为:10:33:16.331
LocalTime.of(int hour, int minute)
LocalTime.of(int hour, int minute, int second)
根据参数设置时间,参数分别为时,分
根据参数设置时间,参数分别为时,分,秒
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime);
localTime = LocalTime.of(12,35);
System.out.println(localTime);
运行结果为:12:35:59,12:35
localTime.getHour()
localTime.getMinute()
localTime.getSecond()
获取当前时间的小时数
获取当前时间的分钟数
获取当前时间的秒数
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.getHour());
System.out.println(localTime.getMinute());
System.out.println(localTime.getSecond());
运行结果为:12,35,59
localTime.withHour(int hour)
localTime.withMinute(int minute)
localTime.withSecond(int second)
with开头的方法,我的理解是将参数替换localTime中的对应属性,重新计算得到新的时间。
将参数中的"小时"替换localTime中的"小时"
将参数中的"分钟"替换localTime中的"分钟"
将参数中的"秒"替换localTime中的"秒"
LocalTime localTime = LocalTime.of(12,35,59);
System.out.println(localTime.withHour(1));
System.out.println(localTime.withMinute(1));
System.out.println(localTime.withSecond(1));
运行结果为:
01:35:59
12:01:59
12:35:01
localTime.minusHours(long hours)
localTime.minusMinutes(long minutes)
localTime.minusSeconds(long seconds)
localTime.plusHours(long hours)
localTime.plusMinutes(long minutes)
localTime.plusSeconds(long seconds)
将当前时间减一小时
将当前时间减一分钟
将当前时间减一秒
将当前时间加一小时
将当前时间加一分钟
将当前时间加一秒

LocalDateTime

LocalDateTime主要是用来处理日期时间的类

获取当前日期

//本地日期,不包括时分秒
 LocalDate nowDate = LocalDate.now();
 //本地日期,包括时分秒
 LocalDateTime nowDateTime = LocalDateTime.now();
 System.out.println("当前时间:"+nowDate);
 System.out.println("当前时间:"+nowDateTime);
 //  当前时间:2018-12-19
 //  当前时间:2018-12-19T15:24:35.822

获取当前的年月日时分秒

//获取当前的时间,包括毫秒
  LocalDateTime ldt = LocalDateTime.now();
  System.out.println("当前年:"+ldt.getYear());   //2018
  System.out.println("当前年份天数:"+ldt.getDayOfYear());//172 
  System.out.println("当前月:"+ldt.getMonthValue());
  System.out.println("当前时:"+ldt.getHour());
  System.out.println("当前分:"+ldt.getMinute());
  System.out.println("当前时间:"+ldt.toString());
 //   当前年:2018
 //   当前年份天数:353
 //   当前月:12
 //   当前时:15
 //   当前分:24
 //   当前时间:2018-12-19T15:24:35.833

格式化时间

LocalDateTime ldt = LocalDateTime.now();
System.out.println("格式化时间: "+ ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
//格式化时间:2018-12-19 15:37:47.119

时间处理

LocalDateTime ldt = LocalDateTime.now();
  System.out.println("后5天时间:"+ldt.plusDays(5));
  System.out.println("前5天时间并格式化:"+ldt.minusDays(5).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); //2018-06-16
  System.out.println("前一个月的时间:"+ldt2.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyyMM"))); //2018-06-16
  System.out.println("后一个月的时间:"+ldt2.plusMonths(1)); //2018-06-16
  System.out.println("指定2099年的当前时间:"+ldt.withYear(2099)); //2099-06-21T15:07:39.506
 //  后5天时间:2018-12-24T15:50:37.508
 //  前5天时间并格式化:2018-12-14
 //  前一个月的时间:201712
 //  后一个月的时间:2018-02-04T09:19:29.499
 //  指定2099年的当前时间:2099-12-19T15:50:37.508