我想获取上个月的最后一天。 但这似乎不起作用:
Calendar cal = Calendar.getInstance();
Integer lastDay = cal.getInstance().getActualMaximum(cal.DAY_OF_MONTH);
cal.add(Calendar.MONTH, -1);
Integer prevMonth = cal.get(Calendar.MONTH);
Integer prevMonthYear = cal.get(Calendar.YEAR);
Integer lastDayPrevMonth = cal.getInstance().getActualMaximum(cal.DAY_OF_MONTH);
System.out.println("Previous month was: " + prevMonth + "-" + prevMonthYear);
System.out.println("Last day in previous month was: " + lastDayPrevMonth);
System.out.println("Last day in this month is: " + lastDay);
这个输出:
I/System.out﹕: Previous month was 10-2015
I/System.out﹕: Last day in previous month was 31
I/System.out﹕: Last day in this month is 31
现在是上个月,即 11 月 (10) 日,现在是 12 月 (11) 日。 这个月的最后一天也是正确的,但显然,上个月的最后一天不是31,而是30。
当我执行 add -1 操作时,为什么第二个 getActualMaximum
给出与第一个相同的“月末最后一天”?
最佳答案
当前代码中的问题是您多次调用返回当前日期的 Calendar.getInstance()
方法。
要获取上个月最后一天的 Calendar
,您可以执行以下操作:
public static void main(String... args) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
}
它从当前月份减去一个月,并将月份中的第几天设置为其最大值,通过 getActualMaximum
获得.请注意,月份在 Calendar
中是从 0 开始的,因此一月实际上是 0。
关于java - 日历 - 获取上个月的最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076518/