2017-03-24 119 views
0

我正在嘗試做一些非常簡單的事情,拿一個日期並從下一個月獲取第一天。我曾嘗試使用日曆。這裏的日期是日曆類型。Java獲取下個月的第一天給定日期

Calendar nextMonthFirst = (Calendar)date.clone(); 

    int year = date.get(Calendar.YEAR); 
    int month = date.get(Calendar.MONTH); 

    nextMonthFirst.clear(); 

    nextMonthFirst.set(year, month+1,1); 
    nextMonthFirst.add(Calendar.DAY_OF_MONTH, 0); 
    return nextMonthFirst 

當我使用日期作爲 cal.set(2016,11,30); 我得到的輸出爲2017-01-01,而不是2016-12-01。任何想法我做錯了什麼?

+0

月份值是從零開始的...所以11意味着12月份當您做cal.set(2016,11,30) – dev8080

+2

IMO時,這個零基月份是這個日期API中最糟糕的事情。我建議您使用其他API:http://stackoverflow.com/a/589940/7605325 –

+0

如果您可以使用Java SE 8,請使用新的LocalDate API。 – dev8080

回答

2

請嘗試以下操作,但請改用Java 8和java.time API!

import java.util.Calendar; 

import static java.util.Calendar.*; 
import static java.util.Calendar.DAY_OF_MONTH; 

/** 
* Created by kedar on 3/24/17. 
*/ 
public class FirstDayOfNext { 
    public static void main(String[] args) { 
     Calendar today = getInstance(); 
     today.clear(); 
     today.set(2016, NOVEMBER, 30); 
     System.out.println("today date: " + today.getTime()); 
     Calendar next = getInstance(); 
     next.clear(); 
     next.set(YEAR, today.get(YEAR)); 
     next.set(MONTH, today.get(MONTH) + 1); 
     next.set(DAY_OF_MONTH, 1); // optional, default: 1, our need 
     System.out.println("next date: " + next.getTime()); 
    } 
} 

它打印:

today date: Wed Nov 30 00:00:00 PST 2016 
next date: Thu Dec 01 00:00:00 PST 2016 

預期。

+0

感謝您的答覆。日期將始終是月底。我怎樣才能得到12-31-2016的解決方案,哪一年也會發生變化? – Mary

+0

使用cal.add(Calendar.DATE,1)解決此問題 – Mary

+0

不,我的解決方案也適用於該日期:'下個日期:Sun Jan 01 00:00:00 PST 2017' –

相關問題