如何获得下个月的具体日期? (Java 8)

How to get a specific date of next month? (Java 8)

根据今天的日期,我应该得到下个月的16号日期。

例如,在传递 13-12-2021 时,我应该得到 16-01-2022。

我需要从当前日期(输入日期)算起下个月的第 16 天。示例:

任何帮助将不胜感激。谢谢

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。这样做让我和 reader 都免于考虑如果下个月的今天不存在会发生什么——例如,如果当前日期是 1 月 30 日(没有 2 月 30 日)。人们仍然想考虑的是,如果您 请求 下个月不存在的某天会发生什么。例如,1 月 13 日要求下个月 30 日。我们也可以试试看:

    System.out.println(nthDayOfFollowingMonth(
            30, LocalDate.of(2022, Month.JANUARY, 13)));

我觉得这个结果很合理:

java.time.DateTimeException: Invalid date 'FEBRUARY 30'