2007年6月15日金曜日

Calendar実装の違い

JDK1.4のjavadocでは

> set(f, value) では、フィールド f が value に変更されます。
> さらに、フィールド f が変更されたことを示すように内部メンバ
> 変数が設定されます。f はただちに変更されますが、カレンダの
> ミリ秒は、get()、getTime()、または getTimeInMillis() が次に
> 呼び出されるまで再計算されません。

と記載されていますが、beforeメソッドでも例外がスローされます。

Tiger(JDK1.5)ではjavadocの記載どおりに例外がスローされるようになったようです。








public static void main(String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println("args[" + (i+1) + "]: " + args[i]);

Calendar today = Calendar.getInstance();

Calendar target = Calendar.getInstance();
target.set(Integer.parseInt(args[0]),
Integer.parseInt(args[1]),
Integer.parseInt(args[2]));

target.setLenient(new Boolean(args[3]).booleanValue());

String msg = "入力された日付は";
if (target.before(today)) {
msg += "過去です。";
} else {
msg += "未来です。";
}

System.out.println(msg);
System.out.println("入力日付: " + target.getTime());
System.out.println("今日 : " + today.getTime());
}


java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

args[1]: 2007
args[2]: 1
args[3]: 33
args[4]: false
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1523)
at java.util.Calendar.updateTime(Calendar.java:1569)
at java.util.Calendar.getTimeInMillis(Calendar.java:912)
at java.util.Calendar.before(Calendar.java:1163)
at SunIbmCalendarProblem.main(SunIbmCalendarProblem.java:22)

java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

args[1]: 2007
args[2]: 1
args[3]: 33
args[4]: false
入力された日付は過去です。
Exception in thread "main" java.lang.IllegalArgumentException: DAY_OF_MONTH
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2290)
at java.util.Calendar.updateTime(Calendar.java:2260)
at java.util.Calendar.getTimeInMillis(Calendar.java:1044)
at java.util.Calendar.getTime(Calendar.java:1017)
at SunIbmCalendarProblem.main(SunIbmCalendarProblem.java:29)

0 件のコメント: