localdate 是 java 8 引入的不可变日期类,仅表示“年-月-日”,通过 now()、of()、parse() 创建;提供 getyear()、getmonthvalue() 等安全 getter;所有计算返回新对象,支持 plus/minus/with/adjuster;含 isbefore/isafter/isleapyear 等语义化判断方法。

LocalDate 是 Java 8 引入的不可变日期类,专用于表示“年-月-日”格式的日期(不包含时间与时区),适合日常业务中纯日期场景,比如生日、合同生效日、报表统计日等。
如何创建 LocalDate 对象
不能用 new 创建,必须通过静态工厂方法:
- LocalDate.now():获取系统默认时区的当前日期
- LocalDate.of(2024, 10, 5):按年、月、日构造(月从 1 开始,不是 0)
- LocalDate.parse("2024-10-05"):解析 ISO 格式字符串(yyyy-MM-dd)
- LocalDate.parse("05/10/2024", DateTimeFormatter.ofPattern("dd/MM/yyyy")):自定义格式解析
提取年月日字段
每个字段都提供独立 getter 方法,返回基本类型,安全直观:
- date.getYear() → 返回 int,如 2024
- date.getMonthValue() → 返回 1~12 的 int(注意不是 0~11)
- date.getMonth() → 返回 Month 枚举(如 Month.OCTOBER),便于判断或国际化
- date.getDayOfMonth() → 返回当月第几天(1~28/29/30/31)
- date.getDayOfYear() → 返回当年第几天(1~365/366)
- date.getDayOfWeek() → 返回 DayOfWeek 枚举(如 DayOfWeek.FRIDAY)
日期计算与调整
所有操作都返回新对象(不可变性),原对象不变:
- date.plusDays(7) / date.minusMonths(1):加减天、月、年、周等
- date.withYear(2025) / date.withDayOfMonth(1):替换某字段(自动处理非法值,如 2024-02-30 → 2024-02-29)
- date.with(TemporalAdjusters.firstDayOfNextMonth()):使用预置调节器,例如首日、末日、上一个周一等
比较与判断
直接用方法语义清晰,无需手动计算毫秒差:
- date.isBefore(other) / date.isAfter(other) / date.isEqual(other)
- date.isLeapYear():是否闰年
- date.lengthOfMonth():当月总天数(28~31)
- date.isSupported(ChronoField.DAY_OF_MONTH):判断是否支持某字段(通常总是 true)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











