2017-03-24 10 views
0

私は何か非常に簡単なことをしようとしています、日付を取って、翌月の最初の日を取得します。私はカレンダーを使ってみました。ここで、dateはCalendar型です。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 

Iは cal.set(2016,11,30)として日付を使用します。 2016-12-01の代わりに2017-01-01という出力が得られます。私が間違って何をしているのか?

+0

月の値はゼロベースなので、11はcal.set(2016,11,30) – dev8080

+2

IMOの12月を意味します。このゼロベースの月は、この日付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' –

関連する問題