LocalDate和LocalDateTime是Java 8引入的不带时区的日期时间类,分别表示年月日和年月日时分秒,适用于生日、订单时间等场景,提供now()、of()、plus/minus、isBefore/isAfter等方法支持创建、计算和比较操作,通过ChronoUnit可计算日期间隔,配合DateTimeFormatter实现格式化输出,与Date可通过Instant转换,二者均为不可变对象,推荐替代Date和Calendar使用。

Java 8 引入了新的日期时间 API,位于 java.time 包中,其中 LocalDate 和 LocalDateTime 是最常用的类之一。它们用于处理不带时区的日期和日期时间,使用起来简洁且线程安全。
LocalDate:只表示日期
LocalDate 表示一个年月日的组合,比如 2025-04-05,不包含时间或时区信息。适合记录生日、节假日等纯日期场景。
常用方法:- LocalDate.now():获取当前系统日期
- LocalDate.of(2025, 4, 5):创建指定年月日的日期
- date.plusDays(3):增加3天(返回新对象)
- date.minusMonths(1):减去一个月
- date.getDayOfWeek():获取星期几(如 MONDAY)
- date.getYear():获取年份
示例:
LocalDate today = LocalDate.now(); System.out.println(today); // 输出:2025-04-05 LocalDate birthday = LocalDate.of(1990, 5, 20); boolean isAfter = today.isAfter(birthday); // 判断是否在某个日期之后
LocalDateTime:表示日期+时间
LocalDateTime 包含年月日时分秒,精确到纳秒,但依然不带时区。适用于记录事件发生的具体时间点,如订单创建时间。
立即学习“Java免费学习笔记(深入)”;
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- LocalDateTime.now():获取当前日期时间
- LocalDateTime.of(2025, 4, 5, 14, 30):创建指定日期时间
- dateTime.plusHours(2):增加2小时
- dateTime.withMinute(0):设置分钟为0
- dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")):格式化输出
示例:
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 输出:2025-04-05T10:15:30.123
LocalDateTime meeting = LocalDateTime.of(2025, 4, 10, 9, 0);
String formatted = meeting.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm"));
System.out.println(formatted); // 输出:2025年04月10日 09:00
日期比较与计算
这两个类都支持直接比较和时间段操作。
- isBefore()、isAfter()、isEqual() 可用于判断日期前后关系
- 使用 ChronoUnit 计算间隔,例如:
LocalDate start = LocalDate.of(2025, 1, 1); LocalDate end = LocalDate.of(2025, 12, 31); long daysBetween = ChronoUnit.DAYS.between(start, end); // 364
与旧日期类型的转换
如果需要与 Date 或 Calendar 交互,可以通过 Instant 中转。
-
Date 转 LocalDateTime:
new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() -
LocalDateTime 转 Date:
Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant())
基本上就这些。LocalDate 和 LocalDateTime 设计清晰,操作直观,推荐在所有新项目中使用它们替代 Date 和 Calendar。注意它们是不可变对象,每次修改都会返回新实例。









