Java LocalDate、LocalTime和LocalDateTime日期时间类的用法(附带实例)
JDK 1.8 中,新增了 LocalDate 类、LocalTime 类、LocalDateTime 类等几个日期时间类,位于 java.time 包中,都是不可变的。在日期时间的处理上,这些类提供了更丰富的方法以及更清晰的格式,逐渐替代了之前的 Date 类。
LocalDate 类不能通过 new 关键字来创建对象,它提供了两种获取对象的方法:
根据指定年月日来创建日期对象。具体语法如下:
除 now() 和 of() 方法外,LocalDate 类还提供了获取日期信息、日期运算、格式化的方法,常用方法如下表所示:
接下来,通过案例来演示 LocalDate 类常用方法的使用。
LocalTime 类也不能通过 new 关键字来创建对象,它同样提供了两个获取对象的方法:
具体语法如下:
除 now() 和 of() 方法外,LocalTime 类还提供了获取时间信息、进行时间运算、格式化的方法,常用方法与 LocalDate 类相类似,此处不在一一说明。
接下来,通过案例来演示 LocalTime 类常用方法的使用:
LocalDateTime 类同时含有LocalDate类和LocalTime类的方法,而且还提供了额外的转换方法。
接下来,通过案例来演示 LocalDateTime 对象的获取以及常用方法的使用。
除此之外,还演示了几个类之间的转换:
Java LocalDate类
LocalDate 类用来表示日期,只有年月日,没有时分秒。LocalDate 类不能通过 new 关键字来创建对象,它提供了两种获取对象的方法:
- 一个是使用 now() 方法获取系统当前时间;
- 另外一个是使用of(int year, int month, int dayOfMonth)
根据指定年月日来创建日期对象。具体语法如下:
LocalDate 变量名 = LocalDate.now(); LocalDate 变量名 = LocalDate.of(年,月,日);
除 now() 和 of() 方法外,LocalDate 类还提供了获取日期信息、日期运算、格式化的方法,常用方法如下表所示:
| 方法 | 方法描述 |
|---|---|
| LocalDate now() | 获取当前日期 |
| LocalDate of(int year, int month, int dayOfMonth) | 根据参数设置日期,参数分别为年、月、日 |
| int getDayOfMonth() | 获取当前日期是所在月的第几天 |
| DayOfWeek getDayOfWeek() | 获取当前日期所在星期,是一个 DayOfWeek 枚举类的值 |
| int getDayOfYear() | 获取当前日期是所在年的第几天 |
| Month getMonth() | 获取当前日期所在月份,是一个 Month 枚举类的值 |
| int getMonthValue() | 获取当前日期所在月份的数值 |
| int lengthOfMonth() | 获取当前日期所在月份有多少天 |
| int lengthOfYear() | 获取当前日期所在年有多少天 |
| boolean isEqual(LocalDate other) | 判断两个日期是否相同 |
| boolean isLeapYear() | 获取当前日期所在年是否为闰年 |
| LocalDate withDayOfMonth(int dayOfMonth) | 指定当前月的第几天,返回一个新的日期,不影响当前 |
| LocalDate withDayOfYear(int dayOfYear) | 指定当前年的第几天,返回一个新的日期,不影响当前 |
| LocalDate withMonth(int month) | 指定月,返回一个新的日期,不影响当前 |
| LocalDate withYear(int year) | 指定年,返回一个新的日期,不影响当前 |
| LocalDate minusDays(long days) | 将当前日期减 days 天,返回一个新的日期,不影响当前 |
| LocalDate minusWeeks(long weeks) | 将当前日期减 weeks 周,返回一个新的日期,不影响当前 |
| LocalDate minusMonths(long months) | 将当前日期减 months 月,返回一个新的日期,不影响当前 |
| LocalDate minusYears(long years) | 将当前日期减 years 年,返回一个新的日期,不影响当前 |
| LocalDate plusDays(long days) | 将当前日期加 days 天,返回一个新的日期,不影响当前 |
| LocalDate plusWeeks(long weeks) | 将当前日期加 weeks 周,返回一个新的日期,不影响当前 |
| LocalDate plusMonths(long months) | 将当前日期加 months 月,返回一个新的日期,不影响当前 |
| LocalDate plusYears(long years) | 将当前日期加 years 年,返回一个新的日期,不影响当前 |
接下来,通过案例来演示 LocalDate 类常用方法的使用。
import java.time.LocalDate;
public class Demo {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println("系统当前日期:" + date);
LocalDate ofDate = LocalDate.of(2021, 12, 12);
System.out.println("of获取的日期信息:" + ofDate);
// 该方法会返回一个新的日期对象,对原来的日期对象并不会更改
ofDate = ofDate.withDayOfMonth(30); // 参数是这个月的第30天
System.out.println("withDayOfMonth(30):" + ofDate);
ofDate = ofDate.withDayOfYear(30); // 参数是这一年的第30天
System.out.println("withDayOfYear(30):" + ofDate);
ofDate = ofDate.plusDays(30); // 加30天,返回一个新的日期
System.out.println("plusDays(30):" + ofDate);
System.out.println("getMonthValue:" + ofDate.getMonthValue());
System.out.println("lengthOfMonth:" + ofDate.lengthOfMonth());
System.out.println("lengthOfYear:" + ofDate.lengthOfYear());
System.out.println("两个日期是否相等:" + ofDate.isEqual(date));
}
}
程序的运行结果如下:
系统当前日期:2025-04-16 of获取的日期信息:2021-12-12 withDayOfMonth(30):2021-12-30 withDayOfYear(30):2021-01-30 plusDays(30):2021-03-01 getMonthValue:3 lengthOfMonth:31 lengthOfYear:365 两个日期是否相等:false程序中,每次调用日期操作方法时都需要重新赋值,因为 LocalDate 对象不可变,方法返回的都是一个新的对象。
Java LocalTime类
LocalTime 类产生的对象是一个不可变的时间对象,以纳秒精度表示,此类只存储时分秒,而不存储日期和时区。LocalTime 类也不能通过 new 关键字来创建对象,它同样提供了两个获取对象的方法:
- 一个是使用 now() 获取系统当前时间;
- 另外一个是 of() 方法,这个是一个重载的方法,可以根据指定小时、分钟来获取对象,也可以根据指定小时、分钟、秒来获取对象,还可以根据指定小时、分钟、秒、纳秒来获取对象。
具体语法如下:
LocalTime 变量名 = LocalTime.now(); LocalTime 变量名 = LocalTime.of(时,分); LocalTime 变量名 = LocalTime.of(时,分,秒); LocalTime 变量名 = LocalTime.of(时,分,秒,纳秒);
除 now() 和 of() 方法外,LocalTime 类还提供了获取时间信息、进行时间运算、格式化的方法,常用方法与 LocalDate 类相类似,此处不在一一说明。
接下来,通过案例来演示 LocalTime 类常用方法的使用:
import java.time.LocalTime;
public class Demo {
public static void main(String[] args) {
LocalTime time = LocalTime.now();
System.out.println("系统当前时间:" + time);
LocalTime ofTime = LocalTime.of(12,12,12);
System.out.println("of获取的时间信息:" + ofTime);
ofTime = ofTime.withHour(20); // 设置小时为20
System.out.println("ofTime.withHour(20):" + ofTime);
ofTime = ofTime.plusMinutes(60); // 加60分钟
System.out.println("ofTime.plusMinutes(60):" + ofTime);
int hours = ofTime.getHour(); // 获取小时
System.out.println("ofTime.getHour():" + hours);
}
}
程序的运行结果如下:
系统当前时间:02:26:49.524986 of获取的时间信息:12:12:12 ofTime.withHour(20):20:12:12 ofTime.plusMinutes(60):21:12:12 ofTime.getHour():21
Java LocalDateTime类
LocalDateTime 类可以设置年月日时分秒,是 LocalDate 类和 LocalTIme 类的综合,可以通过 now() 和 of() 方法获取对象。LocalDateTime 类同时含有LocalDate类和LocalTime类的方法,而且还提供了额外的转换方法。
接下来,通过案例来演示 LocalDateTime 对象的获取以及常用方法的使用。
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Demo {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.now(); // 通过now()获取系统当前时间
System.out.println("系统当前时间:" + dateTime);
LocalDateTime ofD = LocalDateTime.of(2021,12,12,10,10,10); // 通过of获取对象
System.out.println("通过of(年,月,日,时,分,秒)创建的时间:" + ofD);
LocalDate date = LocalDate.of(2021,12,12);
LocalTime time = LocalTime.of(10,10,10);
// 通过LocalDate和LocalTime组合成LocalDateTime对象
LocalDateTime ofD1 = LocalDateTime.of(date,time);
System.out.println("LocalDate与LocalTime组合时间:" + ofD1);
ofD = ofD.withDayOfMonth(2); // 指定月
System.out.println("ofD.withDayOfMonth(2):" + ofD);
ofD = ofD.plusMonths(1); // 加1个月
System.out.println("ofD.plusMonths(1):" + ofD);
LocalDate localDate = ofD.toLocalDate(); // 获取LocalDate
System.out.println("ofD.toLocalDate():" + localDate);
// LocalDate加上LocalTime组成LocalDateTime
LocalDateTime dateTime1 = localDate.atTime(LocalTime.now());
System.out.println("localDate.atTime(LocalTime.now()):" + dateTime1);
}
}
程序的运行结果如下:
系统当前时间:2025-04-16T02:18:27.882659 通过of(年,月,日,时,分,秒)创建的时间:2021-12-12T10:10:10 LocalDate与LocalTime组合时间:2021-12-12T10:10:10 ofD.withDayOfMonth(2):2021-12-02T10:10:10 ofD.plusMonths(1):2022-01-02T10:10:10 ofD.toLocalDate():2022-01-02 localDate.atTime(LocalTime.now()):2022-01-02T02:18:27.891053程序中演示了 LocalDateTime 对象的多种获取形式和常用方法,基本操作与 LocalDate 对象和 LocalTime 对象一样。
除此之外,还演示了几个类之间的转换:
- 将 LocalDate 对象和 LocalTime 对象通过 of() 方法组合成 LocalDateTIme 对象;
- 通过 atTime() 方法将两者组合成一个 LocalDateTime 对象;
- 从 LocalDateTIme 对象中获取一个 LocalDate 对象。
ICP备案:
公安联网备案: