LocalDate.getDayOfYear()直接返回当前日期在一年中的第几天(1–365/366),基于ISO公历且不依赖时区;调用简单、结果稳定,相比Calendar更安全简洁。

LocalDate.getDayOfYear() 直接返回当前日期在一年中的第几天,从 1 到 365(闰年为 366),无需额外计算。
基本用法很简单
调用 getDayOfYear() 方法即可,它属于 LocalDate 的内置方法,基于 ISO 历法(公历)计算:
- 1月1日 → 返回 1
- 12月31日平年 → 返回 365,闰年 → 返回 366
- 不依赖时区,也不受时间部分影响(
LocalDate本就不含时间)
常见使用示例
比如获取今天是一年中的第几天:
LocalDate today = LocalDate.now();
int dayOfYear = today.getDayOfYear();
System.out.println("今天是今年的第 " + dayOfYear + " 天"); // 输出类似:今天是今年的第 120 天
或者指定某一天:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
LocalDate date = LocalDate.of(2024, 3, 1); // 2024 是闰年 System.out.println(date.getDayOfYear()); // 输出 61(1月31天 + 2月29天 + 3月1日)
注意边界和异常情况
这个方法很稳定,但需注意:
- 输入的
LocalDate必须有效(如不能是 2023-02-30),否则会抛DateTimeException - 不支持 null,调用前建议判空(虽然日常构建的
LocalDate很少为 null) - 结果始终是 int 类型,范围固定,无需额外校验
和 Calendar 对比更直观
旧式 Calendar 需要设置字段再获取,容易出错:
Calendar cal = Calendar.getInstance(); cal.set(2024, Calendar.MARCH, 1); int day = cal.get(Calendar.DAY_OF_YEAR); // 同样是 61,但步骤繁琐且易错
而 LocalDate 是不可变对象,链式调用安全简洁,推荐优先使用。

















