日历 - 获取上个月的最后一天

时间:2015-12-03 21:30:04

标签: java android

我想要获得上个月的最后一天。 但这似乎不起作用:

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。

为什么第二个getActualMaximum给出相同的"最后一天的"作为第一个,当我做添加-1的事情?

3 个答案:

答案 0 :(得分:4)

您当前代码中的问题是您多次调用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,因此1月实际上为0。

答案 1 :(得分:1)

试试这个,我认为它会解决你的问题:

/**
 * Returns previous month date in string format
 * @param date
 * @return
 */
private static String getPreviousMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.set(Calendar.DAY_OF_MONTH, 1);  
    cal.add(Calendar.DATE, -1);

    Date preMonthDate = cal.getTime();  
    return format.format(preMonthDate);
}

/**
 * Returns previous to previous month date in string format
 * @param date
 * @return
 */
private static String getPreToPreMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.add(Calendar.MONTH, -1);  
    cal.set(Calendar.DAY_OF_MONTH,1);  
    cal.add(Calendar.DATE, -1);  

    Date preToPreMonthDate = cal.getTime();  
    return format.format(preToPreMonthDate);
}

答案 2 :(得分:0)

您可以使用LocalDate,如下所示:

LocalDate.now().withDayOfMonth(1).minusDays(1)