0

Calendarオブジェクトを作成し、それを特定のスタイルでフォーマットすると、非常に奇妙な動作が発生しました。

コードに話をさせましょう:

public class Test 
{
    public static void main(String[] args) 
    {
        SimpleDateFormat frmt = new SimpleDateFormat();
        frmt.applyPattern("yyyy-MM-dd");
        GregorianCalendar date = new GregorianCalendar(2012,1,1);
        System.out.println(frmt.format(date.getTime()));
    }
}

出力は次のとおりです。

2012-02-01

もちろん、期待される出力は次のとおりです。

2012-01-01

私は何が間違っているのですか?

4

5 に答える 5

3

月は0から始まるのでnew GregorianCalendar(2012,1,1);、2月1日も同様です。1月1日には、

new GregorianCalendar(2012,0,1);
// or even better 
new GregorianCalendar(2012,Calendar.JANUARY,1);
于 2012-11-07T10:57:00.017 に答える
2

月は0で始まりGregorianCalendarます。

public static final int JANUARY = 0; 

Clanedarクラスで宣言されています。2月の場合は1です。コードを更新します-

GregorianCalendar date = new GregorianCalendar(2012,Calendar.JANUARY,1);

また

GregorianCalendar date = new GregorianCalendar(2012,0,1);
于 2012-11-07T10:57:31.420 に答える
1

月は0ベースです。1月==0。javadocからCalendar#MONTH

月を示すgetおよびsetのフィールド番号。これはカレンダー固有の値です。その年の最初の月は1月で、これは0です。最後は、1年の月数によって異なります。

于 2012-11-07T10:57:29.827 に答える
0

0でインデックス付けされた月が必要ない場合は、Joda時間を試してください

于 2012-11-07T10:58:40.463 に答える
0

それは文書化された振る舞いです:

月-カレンダーのMONTHカレンダーフィールドを設定するために使用される値。月の値は0ベースです。たとえば、1月の場合は0。

[Calendar.JANUARY][2]このコンストラクターを使用する場合など、Calendarで定数を使用することをお勧めします。

于 2012-11-07T11:00:33.087 に答える