-7

java.util.Calendar#add(...) メソッドを間違って使用しているに違いありません。予期しない結果が得られます。いくつかの初期条件を仮定します:

  • Calendar オブジェクトを作成し、2012 年 1 月 30 日に初期化します。
  • それに 47 週間を追加し、そこから日付を抽出して、結果を出力しようとしています。
  • 元のインスタンス (またはその複製コピー) に 48 週間を追加して、結果を出力しようとしました。

2 つの結果には 7 日間の差があると思いますが、7 日 + 1 年になります。

例えば:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class CalendarFun {
   public static void main(String[] args) {
      Calendar cal = Calendar.getInstance();
      
      cal.set(Calendar.MONTH, Calendar.JANUARY);
      cal.set(Calendar.DAY_OF_MONTH, 30);
      cal.set(Calendar.YEAR, 2012);
      
      Date date = cal.getTime();
      SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/YYYY");
      System.out.println(dateFormat .format(date));
      
      Calendar newCal = (Calendar) cal.clone();
      newCal.add(Calendar.WEEK_OF_YEAR, 47);
      System.out.println("add 47 weeks: " + dateFormat.format(newCal.getTime()));

      newCal = (Calendar) cal.clone();
      newCal.add(Calendar.WEEK_OF_YEAR, 48);
      System.out.println("add 48 weeks: " + dateFormat.format(newCal.getTime()));
   }
}

これは出力します:

01/30/2012
add 47 weeks: 12/24/2012
add 48 weeks: 12/31/2013

2013 年 12 月 31 日? どうすれば修正できますか?

4

1 に答える 1

10

を に変更しない限り、コードはコンパイルされませんでしYYYYyyyy。その後、うまく機能しているようです。

于 2012-07-04T20:49:23.570 に答える