3

私は次のコードを持っています:-

        Calendar calc = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM-yyyy");
        calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
        calc.set(Calendar.MONTH, Calendar.NOVEMBER);
        System.out.println("---NOV? : " + sdf.format(calc.getTime()));

        Calendar calc1 = Calendar.getInstance();
        calc1.set(Calendar.YEAR, calc1.get(Calendar.YEAR) - 1);
        calc1.set(Calendar.MONTH, Calendar.DECEMBER);
        System.out.println("-- DEC : " + sdf.format(calc1.getTime()));

上記のコードの出力は次のとおりです:-

> ---NOV? : Dec-2012
> -- DEC : Dec-2012

これは1月31日にのみ発生しますが、なぜこれが発生するのか誰かが説明できますか?

4

2 に答える 2

7

カレンダーは寛大な解釈に設定されているので、11月31日と言えば、11月は30日しかないので、12月1日にロールオーバーします。

于 2013-01-31T06:41:42.240 に答える
5

最初のケースは、カレンダーの曜日を変更していないため、「11月31日」を「12月1日」に丸めていると思われます。

于 2013-01-31T06:42:17.720 に答える