如何获得下个月的具体日期? (Java 8)
How to get a specific date of next month? (Java 8)
根据今天的日期,我应该得到下个月的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。
任何帮助将不胜感激。谢谢
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'
根据今天的日期,我应该得到下个月的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。
任何帮助将不胜感激。谢谢
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'