每月最后一天计算java.time.temporal.TemporalAdjusters.lastDayOfMonth()

2022-08-31 07:09:14

我在计算计划发送的通知的下一个最后一天时遇到了问题。

这是我的代码:

RecurrenceFrequency recurrenceFrequency = notification.getRecurrenceFrequency();
Calendar nextNotifTime = Calendar.getInstance();

这是导致问题的行,我相信:

nextNotifTime.add(recurrenceFrequency.getRecurrencePeriod(), 
                  recurrenceFrequency.getRecurrenceOffset());

如何使用日历正确设置通知的下个月的最后一天?


答案 1
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);

这将返回当前月份的实际最大值。例如,现在是闰年的 2 月,因此返回 29 作为 。int


答案 2

java.time.temporal.TemporalAdjusters.lastDayOfMonth()

使用 Java 8 中内置的库,您可以使用 TemporalAdjuster 接口。我们找到了一个可以在 TemporalAdjusters 实用程序类中使用的实现:lastDayOfMonthjava.time

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

LocalDate now = LocalDate.now(); //2015-11-23
LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfMonth()); //2015-11-30

如果您需要添加时间信息,则可以使用任何可用的转换,例如LocalDateLocalDateTime

lastDay.atStartOfDay(); //2015-11-30T00:00