1

今日は2013-02-25ですが、なぜこのコードは2013-03-25を返すのですか?

       String currentDate =  new SimpleDateFormat("yyyy MM dd hh mm ss").format(new java.util.Date());
       System.out.println("current Date "+currentDate);
       StringTokenizer  token = new StringTokenizer(currentDate);
       Calendar cal = Calendar.getInstance();
       cal.set(Integer.parseInt(token.nextToken()),
               Integer.parseInt(token.nextToken()), 
               Integer.parseInt(token.nextToken()), 
               Integer.parseInt(token.nextToken()),
               Integer.parseInt(token.nextToken()),
               Integer.parseInt(token.nextToken()));
       String calenderDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cal.getTime());
       System.out.println("calender date "+calenderDate);
       cal.add(Calendar.MONTH, -1); //  set to one month ago
       String pastDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cal.getTime());
       System.out.println("past Date "+pastDate);

出す

現在の日付20130225 04 56 26

カレンダー日付2013-03-2504:56:26

過去の日付2013-02-2504:56:26

4

3 に答える 3

5

月に1を引きます。したがって、APIは機能します。すなわち:

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

于 2013-02-25T14:03:54.253 に答える
3

JDKでは、月の値は。で始まり0ます。だから2=3月。

Calendar#setドキュメントから:

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

于 2013-02-25T14:04:19.870 に答える
3

暦月は0から始まります。JavaDocを参照してください。

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

これは王室のPITAであり、ほとんどのJava開発者はそのPITAで時間を失いました。これは、驚き最小の原則に間違いなく違反しています。Calendarクラスを使用するときは十分に注意してください...Joda時間のような代替手段があります。

于 2013-02-25T14:05:43.713 に答える