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