我想得到上个月的最后一天.但这似乎不起作用:
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
所以它是上个月,也就是十一月(10),现在是12月(11).这个月的最后一天也是正确的,但显然,上个月的最后一天不是31,而是30.
getActualMaximum
当我添加-1时,为什么第二个给出与第一个相同的"最后一天"?
当前代码中的问题是您多次调用该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
。请注意,月份是从0开始的,Calendar
因此一月实际上是0。