java.time
java.time 的众多优点之一,现代 Java 日期和时间 API,就是这样的日期算术。
public static LocalDate nthDayOfFollowingMonth(
int desiredDayOfMonth, LocalDate currentDate) {
return YearMonth.from(currentDate)
.plusMonths(1)
.atDay(desiredDayOfMonth);
}
用您的示例日期尝试一下:
System.out.println(nthDayOfFollowingMonth(
16, LocalDate.of(2021, Month.DECEMBER, 13)));
输出:
2022-01-16
我们可能不需要转换YearMonth
为LocalDate
. 这样做可以让我和读者都放心,如果下个月不存在今天的月份会发生什么——例如,如果当前日期是 1 月 30 日(没有 2 月 30 日)。仍然要考虑的是,如果您请求下个月不存在的一个月中的某一天会发生什么。例如在 1 月 13 日要求下个月 30 日。我们也可以试试:
System.out.println(nthDayOfFollowingMonth(
30, LocalDate.of(2022, Month.JANUARY, 13)));
我觉得结果很合理:
java.time.DateTimeException:无效日期“2 月 30 日”