【问题标题】:How to get a specific date of next month? (Java 8)如何获得下个月的具体日期? (Java 8)
【发布时间】:2021-11-13 10:51:05
【问题描述】:

以今天的日期,我应该得到下个月的 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。

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

【问题讨论】:

  • 您的搜索结果是什么?如果您找不到完全相同的问题,我相信您可以找到可以拼凑起来的部分。

标签: date java-8 localdatetime date-manipulation


【解决方案1】:

java.time

现代 Java 日期和时间 API java.time 的众多优点之一就是这样的日期算术。

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 日”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2021-02-04
    • 2016-11-16
    相关资源
    最近更新 更多