2015-12-03 15 views
6

前月の最終日を取得したい。 しかしこのdoesntのは動作するようです:カレンダー - 前月の最終日を取得する

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 

だから、前月になってきた、それはそれは今12月(11)であることを与えて、11月(10)です。 今月の最終日も正確ですが、先月の最終日は31日ではなく30日でした。

なぜ、2番目のgetActualMaximumが最初の月と同じ「最後の月」を返すのですか?私が追加-1のことをするとき?

+0

これは、一部のユーザーに役立つ可能性がありますhttp://stackoverflow.com/a/344400/3701433 – Prudhvi

答えて

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)); 
} 

それは現在の月から1ヶ月を減算し、その最大値に日付を設定し、 getActualMaximumで得られた。

/** 
* 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); 
} 
1

これを試してみて、私はそれはあなたの問題を解決するとは思われているように、月がCalendarで0ベースであることに注意してください).withDayOfMonth(1).minusDays(1)

0

あなたは以下のようにLOCALDATEを使用することができます: LocalDate.now(1月は実際には0

関連する問題