0

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

例如,通过 13-12-2021,我应该得到 16-01-2022。

我需要从当前日期(输入日期)开始获得下个月的第 16 天。例子:

  • 通过 13-11-2021 应该得到 16-12-2021。
  • 通过 14-11-2021 应该得到 16-12-2021。
  • 通过 15-11-2021 应该得到 16-12-2021。
  • 通过 02-12-2021 应该得到 16-01-2022。
  • 通过 03-12-2021 应该得到 16-01-2022。
  • 通过 03-01-2022 应该得到 16-02-2022。
  • 通过 04-01-2022 应该得到 16-02-2022。

任何帮助都感激不尽。谢谢。

4

1 回答 1

0

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

我们可能不需要转换YearMonthLocalDate. 这样做可以让我和读者都放心,如果下个月不存在今天的月份会发生什么——例如,如果当前日期是 1 月 30 日(没有 2 月 30 日)。仍然要考虑的是,如果您请求下个月不存在的一个月中的某一天会发生什么。例如在 1 月 13 日要求下个月 30 日。我们也可以试试:

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

我觉得结果很合理:

java.time.DateTimeException:无效日期“2 月 30 日”

于 2021-11-13T11:12:21.703 回答