localdate 的 isbefore、isafter 和 isequal 方法仅比较年月日,不涉及时分秒;isbefore 判断当前日期是否早于参数日期,参数为 null 时抛 nullpointerexception。

LocalDate 的 isBefore、isAfter 和 isEqual 是专门用于日期比较的布尔方法,它们只比较年月日,不涉及时间(因为 LocalDate 本身不含时分秒),用起来直接、安全、不易出错。
isBefore:判断是否在另一个日期之前
返回 true 当且仅当当前日期早于参数日期(即“今天比明天早”)。
- 参数不能为
null,否则抛NullPointerException - 比较基于自然顺序:2023-01-01 isBefore 返回
true - 示例:
LocalDate.of(2023, 1, 15).isBefore(LocalDate.of(2023, 2, 1))→true
isAfter:判断是否在另一个日期之后
返回 true 当且仅当当前日期晚于参数日期(即“明天比今天晚”)。
- 同样要求参数非空
- 与
isBefore互为反向关系(但不完全对称,因为相等时两者都返回false) - 示例:
LocalDate.now().isAfter(LocalDate.parse("2020-01-01"))→ 几乎总是true
isEqual:判断是否与另一个日期完全相同
返回 true 当且仅当两个 LocalDate 表示同一天(年月日完全一致)。
- 这是最安全的“相等”判断方式,避免了用
equals()可能引发的空指针或类型问题(虽然LocalDate.equals()本身也可靠,但isEqual语义更明确) - 注意:它不等于
==,也不等价于compareTo() == 0(尽管结果一致,但isEqual更直观) - 示例:
LocalDate.of(2024, 12, 25).isEqual(LocalDate.parse("2024-12-25"))→true
替代方案:compareTo 与三值比较
如果需要一次性区分“前/等/后”,可用 compareTo():
- 返回负数 → 当前日期在前(等价于
isBefore) - 返回 0 → 日期相等(等价于
isEqual) - 返回正数 → 当前日期在后(等价于
isAfter) - 适合用于排序或 switch-like 判断场景
不复杂但容易忽略:这三个方法都是实例方法,调用者是“被比较的日期”,参数是“用来比较的日期”,语序和日常表达一致,读起来很自然。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











