簡體   English   中英

日歷 - 獲取上個月的最后一天

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM