[英]Calendar - Get last day of previous month
我想得到上個月的最后一天。 但這似乎不起作用:
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
給出與第一個相同的“last-in-month-month”,當我執行add -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
獲得。 請注意,月份在Calendar
0開始,因此1月實際上是0。
試試這個,我想它會解決你的問題:
/**
* 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);
}
您可以使用LocalDate,如下所示:
LocalDate.now().withDayOfMonth(1).minusDays(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.