目录
从Java8开始,推出了LocalDate、LocalTime、LocalDateTime这三个时间工具类,实现了更好地时间处理。LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。
1、LocalDateTime
java.time.LocalDateTime类表示ISO-8601日历系统中没有时区的日期时间。下面是常用的方法:
方法 | 说明 |
---|---|
LocalDateTime.now() | 从默认时区的系统时钟获取当前的日期时间。 |
public static LocalDateTime of(int year,Month month,int dayOfMonth,int hour,int minute,int second) | 从年,月,日,小时,分钟和秒获得LocalDateTime 的实例,将纳秒设置为零。 |
localDateTime.getYear() | 获取年份字段。 |
localDateTime.getMonth() | 使用Month 枚举获取月份字段。 |
localDateTime.getMonthValue() | 获取1 到12 之间的月份字段。 |
localDateTime.getHour() | 获取小时字段。 |
localDateTime.getMinute() | 获取分钟字段。 |
localDateTime.getSecond() | 获取秒字段。 |
localDateTime.getDayOfYear() | 获取当前日期是所在年的第几天 |
localDateTime.getDayOfMonth() | 获取当前日期月份中的第几天,从1 到31 。 |
localDateTime.getDayOfWeek() | 获取星期几字段,即枚举DayOfWeek 。 |
localDateTime.plusYears(long years) | 将当前日期加years年 |
localDateTime.plusMonths(long months) | 将当前日期加months月 |
localDateTime.plusWeeks(long weeks) | 将当前日期加weeks周 |
localDateTime.plusDays(long days) | 将当前日期加days天 |
localDateTime.plusHours(long hours) | 将当前日期加hours小时 |
localDateTime.plusMinutes(long minutes) | 将当前日期加minutes分钟 |
localDateTime.plusSeconds(long seconds) | 将当前日期加seconds秒 |
localDateTime.minusYears(long years) | 将当前日期减years年 |
localDateTime.minusMonths(long months) | 将当前日期减months月 |
localDateTime.minusWeeks(long weeks) | 将当前日期减weeks周 |
localDateTime.minusDays(long days) | 将当前日期减days天 |
localDateTime.minusHours(long hours) | 将当前日期减hours小时 |
localDateTime.minusMinutes(long minutes) | 将当前日期减minutes分钟 |
localDateTime.minusSeconds(long seconds) | 将当前日期减seconds秒 |
localDateTime.minus(long amountToSubtract, TemporalUnit unit) | 减去指定的时间。 |
localDateTime.format(DateTimeFormatter formatter) | 使用指定的格式化程序格式化此日期时间。 |
localDateTime.isAfter(ChronoLocalDateTime other) | 检查这个日期时间是否在指定的日期之后。 |
localDateTime.isBefore(ChronoLocalDateTime other) | 检查此日期时间是否在指定的日期时间之前。 |
localDateTime.compareTo(ChronoLocalDateTime other) | 将此日期时间与其他日期时间进行比较。 |
localDateTime.withDayOfYear(int dayOfYear) | 返回LocalDateTime年的第几天更改为新值后的副本 |
localDateTime.withDayOfMonth(int dayOfMonth) | 返回LocalDateTime月的第几天更改为新值后的副本 |
localDateTime.withYear(int year) | 返回LocalDateTime年份更改为新值后的副本 |
localDateTime.withMonth(int month) | 返回LocalDateTime的月份更改为新值后的副本 |
localDateTime.withHour(int hour) | 返回LocalDateTime的小时数更改为新值后的副本 |
localDateTime.withMinute(int minute) | 返回LocalDateTime的分钟数更改为新值后的副本 |
localDateTime.withSecond(int second) | 返回LocalDateTime的秒数更改为新值后的副本 |
localDateTime.withNano(int nanoOfSecond) | 返回LocalDateTime的纳秒数更改为新值后的副本 |
代码示例:
public class TimeExample01 {
public static void main(String[] args) {
// 获取当前时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
// 获取指定时间
LocalDateTime of = LocalDateTime.of(2020,02,01,11,01,01);
System.out.println(of);
System.out.println("getYear(): " + localDateTime.getYear());
System.out.println("getDayOfYear(): " + localDateTime.getDayOfYear());
System.out.println("getMonth(): " + localDateTime.getMonth());
System.out.println("getMonthValue(): " + localDateTime.getMonthValue());
System.out.println("getDayOfMonth(): " + localDateTime.getDayOfMonth());
System.out.println("getDayOfWeek(): " + localDateTime.getDayOfWeek());
System.out.println("getHour(): " + localDateTime.getHour());
System.out.println("getMinute(): " + localDateTime.getMinute());
System.out.println("getSecond(): " + localDateTime.getSecond());
System.out.println("getNano(): " + localDateTime.getNano());
// 时间计算
System.out.println("plusYears(): " + localDateTime.plusYears(1));
System.out.println("plusMonths(): " + localDateTime.plusMonths(1));
System.out.println("plusWeeks(): " + localDateTime.plusWeeks(1));
System.out.println("plusDays(): " + localDateTime.plusDays(1));
System.out.println("plusHours(): " + localDateTime.plusHours(1));
System.out.println("minusYears(): " + localDateTime.minusYears(1));
System.out.println("minusMonths(): " + localDateTime.minusMonths(1));
System.out.println("minusWeeks(): " + localDateTime.minusWeeks(1));
System.out.println("minusDays(): " + localDateTime.minusDays(1));
System.out.println("minusMinutes(): " + localDateTime.minusMinutes(1));
//格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
System.out.println("format(): " + localDateTime.format(formatter));
//比较时间
LocalDateTime plusDays = LocalDateTime.now().plusDays(1);
System.out.println("isAfter(): " + localDateTime.isAfter(plusDays));
System.out.println("isBefore(): " + localDateTime.isBefore(plusDays));
System.out.println("compareTo(): " + localDateTime.compareTo(plusDays));
}
}
运行结果:
2020-02-01T12:17:58.264
2020-02-01T11:01:01
getYear(): 2020
getDayOfYear(): 32
getMonth(): FEBRUARY
getMonthValue(): 2
getDayOfMonth(): 1
getDayOfWeek(): SATURDAY
getHour(): 12
getMinute(): 17
getSecond(): 58
getNano(): 264000000
plusYears(): 2021-02-01T12:17:58.264
plusMonths(): 2020-03-01T12:17:58.264
plusWeeks(): 2020-02-08T12:17:58.264
plusDays(): 2020-02-02T12:17:58.264
plusHours(): 2020-02-01T13:17:58.264
minusYears(): 2019-02-01T12:17:58.264
minusMonths(): 2020-01-01T12:17:58.264
minusWeeks(): 2020-01-25T12:17:58.264
minusDays(): 2020-01-31T12:17:58.264
minusMinutes(): 2020-02-01T12:16:58.264
format(): 2020-02-01 12:17:58
isAfter(): false
isBefore(): true
compareTo(): -1
2、LocalDate
方法 | 说明 |
---|---|
LocalDate.now() | 从默认时区的系统时钟获取当前的日期时间。 |
LocalDate.of(int year,Month month,int dayOfMonth) | 从年,月,日,获得LocalDate的实例。 |
localDate.getYear() | 获取年份字段。 |
localDate.getMonth() | 使用Month 枚举获取月份字段。 |
localDate.getMonthValue() | 获取1 到12 之间的月份字段。 |
localDate.lengthOfMonth() | 获取当前日期所在月份有多少天 |
localDate.getDayOfYear() | 获取当前日期是所在年的第几天 |
localDate.getDayOfMonth() | 获取当前日期是月份中的第几天,从1 到31 。 |
localDate.getDayOfWeek() | 获取星期几字段,即枚举DayOfWeek 。 |
localDate.lengthOfYear() | 获取当前日期所在年有多少天 |
localDate.isLeapYear() | 获取当前日期所在年是否是闰年 |
localDate.plusYears(long years) | 将当前日期加years年 |
localDate.plusMonths(long months) | 将当前日期加months月 |
localDate.plusWeeks(long weeks) | 将当前日期加weeks周 |
localDate.plusDays(long days) | 将当前日期加days天 |
localDate.minusYears(long years) | 将当前日期减years年 |
localDate.minusMonths(long months) | 将当前日期减months月 |
localDate.minusWeeks(long weeks) | 将当前日期减weeks周 |
localDate.minusDays(long days) | 将当前日期减days天 |
localDate.minus(long amountToSubtract, TemporalUnit unit) | 减去指定的时间。 |
localDate.format(DateTimeFormatter formatter) | 使用指定的格式化程序格式化此日期时间。 |
localDate.isAfter(ChronoLocalDateTime other) | 检查这个日期时间是否在指定的日期之后。 |
localDate.isBefore(ChronoLocalDateTime other) | 检查此日期时间是否在指定的日期时间之前。 |
localDate.compareTo(ChronoLocalDateTime other) | 将此日期时间与其他日期时间进行比较。 |
localDate.withDayOfYear(int dayOfYear) | 返回localDate年的第几天更改为新值后的副本 |
localDate.withDayOfMonth(int dayOfMonth) | 返回localDate月的第几天更改为新值后的副本 |
localDate.withYear(int year) | 返回localDate年份更改为新值后的副本 |
localDate.withMonth(int month) | 返回localDate的月份更改为新值后的副本 |
public class TimeExample02 {
public static void main(String[] args) {
// 获取当前时间
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
// 获取指定时间
LocalDate of = LocalDate.of(2020,02,01);
System.out.println(of);
System.out.println("getYear(): " + localDate.getYear());
System.out.println("getMonth(): " + localDate.getMonth());
System.out.println("getMonthValue(): " + localDate.getMonthValue());
System.out.println("getDayOfYear(): " + localDate.getDayOfYear());
System.out.println("getDayOfMonth(): " + localDate.getDayOfMonth());
System.out.println("getDayOfWeek(): " + localDate.getDayOfWeek());
System.out.println("lengthOfMonth(): " + localDate.lengthOfMonth());
System.out.println("lengthOfYear(): " + localDate.lengthOfYear());
System.out.println("isLeapYear(): " + localDate.isLeapYear());
// 时间计算
System.out.println("plusYears(): " + localDate.plusYears(1));
System.out.println("plusMonths(): " + localDate.plusMonths(1));
System.out.println("plusWeeks(): " + localDate.plusWeeks(1));
System.out.println("plusDays(): " + localDate.plusDays(1));
System.out.println("minusYears(): " + localDate.minusYears(1));
System.out.println("minusMonths(): " + localDate.minusMonths(1));
System.out.println("minusWeeks(): " + localDate.minusWeeks(1));
System.out.println("minusDays(): " + localDate.minusDays(1));
//格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd");
System.out.println("format(): " + localDate.format(formatter));
//比较时间
LocalDate plusDays = LocalDate.now().plusDays(1);
System.out.println("isAfter(): " + localDate.isAfter(plusDays));
System.out.println("isBefore(): " + localDate.isBefore(plusDays));
System.out.println("compareTo(): " + localDate.compareTo(plusDays));
}
}
输出结果:
2020-02-01
2020-02-01
getYear(): 2020
getMonth(): FEBRUARY
getMonthValue(): 2
getDayOfYear(): 32
getDayOfMonth(): 1
getDayOfWeek(): SATURDAY
lengthOfMonth(): 29
lengthOfYear(): 366
isLeapYear(): true
plusYears(): 2021-02-01
plusMonths(): 2020-03-01
plusWeeks(): 2020-02-08
plusDays(): 2020-02-02
minusYears(): 2019-02-01
minusMonths(): 2020-01-01
minusWeeks(): 2020-01-25
minusDays(): 2020-01-31
format(): 2020-02-01
isAfter(): false
isBefore(): true
compareTo(): -1
3、LocalTime
方法 | 说明 |
---|---|
LocalTime.now() | 从默认时区的系统时钟获取当前的日期时间。 |
LocalTime.of(int hour,int minute,int second) | 从小时,分钟和秒获得LocalTime的实例,将纳秒设置为零。 |
LocalTime.getHour() | 获取小时字段。 |
LocalTime.getMinute() | 获取分钟字段。 |
LocalTime.getSecond() | 获取秒字段。 |
LocalTime.plusHours(long hours) | 将当前日期加hours小时 |
LocalTime.plusMinutes(long minutes) | 将当前日期加minutes分钟 |
LocalTime.plusSeconds(long seconds) | 将当前日期加seconds秒 |
LocalTime.minusHours(long hours) | 将当前日期减hours小时 |
LocalTime.minusMinutes(long minutes) | 将当前日期减minutes分钟 |
LocalTime.minusSeconds(long seconds) | 将当前日期减seconds秒 |
LocalTime.minus(long amountToSubtract, TemporalUnit unit) | 减去指定的时间。 |
LocalTime.format(DateTimeFormatter formatter) | 使用指定的格式化程序格式化此日期时间。 |
LocalTime.isAfter(ChronoLocalDateTime other) | 检查这个日期时间是否在指定的日期之后。 |
LocalTime.isBefore(ChronoLocalDateTime other) | 检查此日期时间是否在指定的日期时间之前。 |
LocalTime.compareTo(ChronoLocalDateTime other) | 将此日期时间与其他日期时间进行比较。 |
LocalTime.withHour(int hour) | 返回LocalTime的小时数更改为新值后的副本 |
LocalTime.withMinute(int minute) | 返回LocalTime的分钟数更改为新值后的副本 |
LocalTime.withSecond(int second) | 返回LocalTime的秒数更改为新值后的副本 |
LocalTime.withNano(int nanoOfSecond) | 返回LocalTime的纳秒数更改为新值后的副本 |
public class TimeExample03 {
public static void main(String[] args) {
// 获取当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
// 获取指定时间
LocalTime of = LocalTime.of(11,01,01);
System.out.println(of);
System.out.println("getHour(): " + localTime.getHour());
System.out.println("getMinute(): " + localTime.getMinute());
System.out.println("getSecond(): " + localTime.getSecond());
System.out.println("getNano(): " + localTime.getNano());
// 时间计算
System.out.println("plusHours(): " + localTime.plusHours(1));
System.out.println("plusMinutes(): " + localTime.plusMinutes(1));
System.out.println("plusSeconds(): " + localTime.plusSeconds(1));
System.out.println("plusNanos(): " + localTime.plusNanos(1));
System.out.println("minusHours(): " + localTime.minusHours(1));
System.out.println("minusMinutes(): " + localTime.minusMinutes(1));
System.out.println("minusSeconds(): " + localTime.minusSeconds(1));
System.out.println("minusNanos(): " + localTime.minusNanos(1));
//格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println("format(): " + localTime.format(formatter));
//比较时间
LocalTime plusDays = LocalTime.now().plusHours(1);
System.out.println("isAfter(): " + localTime.isAfter(plusDays));
System.out.println("isBefore(): " + localTime.isBefore(plusDays));
System.out.println("compareTo(): " + localTime.compareTo(plusDays));
}
}
运行结果:
13:02:16.607
11:01:01
getHour(): 13
getMinute(): 2
getSecond(): 16
getNano(): 607000000
plusHours(): 14:02:16.607
plusMinutes(): 13:03:16.607
plusSeconds(): 13:02:17.607
plusNanos(): 13:02:16.607000001
minusHours(): 12:02:16.607
minusMinutes(): 13:01:16.607
minusSeconds(): 13:02:15.607
minusNanos(): 13:02:16.606999999
format(): 13:02:16
isAfter(): false
isBefore(): true
compareTo(): -1