1

私は次のコードを持っています。月を取得するときに問題が発生します。「「月」引数は1から12の範囲でなければなりません」と書かれています。そしてそれは常に0を返します。なぜですか?

    String target = "2013-01-04";
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = df.parse(target);

   Calendar cal = Calendar.getInstance();
   cal.setTime(date);
   int year = cal.get(Calendar.YEAR);
   System.out.println("year-"+year);
   int month = cal.get(Calendar.MONTH);
   System.out.println("month-"+month);
   int day = cal.get(Calendar.DAY_OF_MONTH);
   System.out.println("day-"+day);
4

1 に答える 1

5

これはCalendarクラスの癖です。他のすべての日付部分が1ベースであるにもかかわらず、いくつかの非常識な理由で、それは月にゼロベースのインデックスを使用します。

長い列に並ぶことになるので、これについて問題を提起することさえ考えないでください。カレンダーは、間違いなくJDKで最も壊れたクラスです。

「修正」は、jodatimeライブラリを使用することです。これは、日付の操作、解析、およびフォーマットのすべてのニーズに最適です。これは、現在、実質的に業界標準です。

于 2013-01-11T03:28:05.663 に答える