web-dev-qa-db-ja.com

なぜJava Calendar set(int year、int month、int date)が正しい日付を返さないのですか?

ドキュメントによると、カレンダーset()は次のとおりです。

http://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Calendar.html#set%28int,%20int,%20int%29

set(int year, int month, int date) 
Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH.

コード:

Calendar c1 = GregorianCalendar.getInstance();
c1.set(2000, 1, 30);  //January 30th 2000
Date sDate = c1.getTime();

System.out.println(sDate);

output:

Wed Mar 01 19:32:21 JST 2000

1月30日ではない理由???

53
masato-san

月の1は2月です。 2月30日は3月1日に変更されます。月には0を設定する必要があります。最良の方法は、カレンダーで定義された定数を使用することです:

c1.set(2000, Calendar.JANUARY, 30);
103
Benoit Thiery

Calendarオブジェクトの月は0から始まります

0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY
20
fmucar

この例で選択した日付は興味深いものです。コードブロックの例は次のとおりです。

Calendar c1 = GregorianCalendar.getInstance();
c1.set(2000, 1, 30);  //January 30th 2000
Date sDate = c1.getTime();

System.out.println(sDate);

出力Wed Mar 01 19:32:21 JST 2000

私が最初に例を読んだとき、出力は間違っていると思いますが、本当です:)

  • Calendar.Monthは0から始まるため、1は2月を意味します。
  • 最終日は2月28日なので、出力は3月2日です。
  • ただし、選択した年は重要です。2000年は2月29日なので、結果は3月1日になります。
7
erhun