我想要获得上个月的最后一天。 但这似乎不起作用:
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的事情?
答案 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)