计算的最后一天

问题

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

这是我的代码:

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

这是造成我认为的问题的界限:

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

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


#1 热门回答(275 赞)

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);

这将返回当前月份的实际最大值。例如,它现在是闰年的2月,所以它返回29 asint


#2 热门回答(27 赞)

并将最后一天作为Date对象:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));

Date lastDayOfMonth = cal.getTime();

#3 热门回答(27 赞)

#java.time

使用Java 8中内置的6936405578库,可以使用TemporalAdjusterclass(或TemporalAdjustersutility类)

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

如果你需要添加时间信息,可以使用任何可用的LocalDate到LocalDateTime转换

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