1. getDayOfMonth()
- 方法定义
public int getDayOfMonth() - 功能说明
返回日期在当月中的天数(范围:1–31)。 - 示例代码
LocalDate date = LocalDate.of(2023, 12, 25); int day = date.getDayOfMonth(); // 返回 25 - 使用场景
生成账单日期、计算当月截止日等。 - 注意事项
结果与月份长度相关(如 2 月最多 29 天)。
2. getDayOfYear()
- 方法定义
public int getDayOfYear() - 功能说明
返回日期在当前年份中的天数(范围:1–366,闰年 366 天)。 - 示例代码
LocalDate date = LocalDate.parse("2024-02-29"); // 闰年 int dayOfYear = date.getDayOfYear(); // 返回 60(31 + 29) - 使用场景
计算年度进度、生成季度报告等。 - 常见错误
忽略闰年影响(如 2023 年 12 月 31 日返回 365,2024 年同日期返回 366)。
3. getDayOfWeek()
- 方法定义
public DayOfWeek getDayOfWeek() - 功能说明
返回DayOfWeek枚举值(MONDAY到SUNDAY),表示星期几。 - 示例代码
LocalDate date = LocalDate.of(2023, 12, 25); DayOfWeek weekday = date.getDayOfWeek(); // 返回 DayOfWeek.MONDAY String name = weekday.name(); // "MONDAY" int value = weekday.getValue(); // 1 (星期一) 到 7 (星期日) - 使用技巧
- 比较星期:
date.getDayOfWeek() == DayOfWeek.SATURDAY - 获取本地化名称:
String cnName = weekday.getDisplayName(TextStyle.FULL, Locale.CHINA); // "星期一"
- 比较星期:
关键注意事项与最佳实践
不可变性
所有方法均不修改原对象,返回新值:LocalDate date = LocalDate.now(); int day = date.getDayOfMonth(); // 安全,date 不变空指针安全
LocalDate不可为null,否则抛出NullPointerException:// 错误示例 LocalDate date = null; int day = date.getDayOfMonth(); // NPE!闰年处理
使用Year.isLeap(year)显式检查闰年:boolean isLeap = Year.of(2024).isLeap(); // true性能优化
- 多次调用同一日期的
getDayOfXxx()时,缓存结果(虽然方法本身轻量)。 - 避免在循环中重复创建
LocalDate对象。
- 多次调用同一日期的
时区影响
LocalDate无时区概念,需确保业务逻辑与预期时区一致:LocalDate today = LocalDate.now(ZoneId.of("Asia/Shanghai"));
总结与快速实践指南
| 方法 | 返回类型 | 范围 | 典型应用场景 |
|---|---|---|---|
getDayOfMonth() |
int |
1–31 | 当月特定日期操作 |
getDayOfYear() |
int |
1–366 | 年度统计、进度计算 |
getDayOfWeek() |
DayOfWeek |
MONDAY–SUNDAY | 星期相关逻辑(如调休) |
实践建议:
- 优先使用
DayOfWeek枚举而非数字,增强可读性。 - 结合
TemporalAdjusters处理复杂日期逻辑(如下个周一):LocalDate nextMonday = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); - 始终校验日期合法性(如
2023-02-30会抛出DateTimeException)。