JavaのCalendarクラスのcompareToメソッドではまった話

投稿者: | 2020年12月21日

たぶん使い方が悪かった。悪かったとはいえはまった。

JavaのCalendarクラスの比較(compareto)で意図せず不一致となりました。

日付のみ扱いたかったので日付のみセットしていました。

その日付のみセットしたカレンダー同士でcompareToを行いました。

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.set(2020,12,20);
cal2.set(2020,12,20);
System.out.println(cal1.compareTo(cal2)); // -1 (cal1 < cal2) 不一致

同じ日付のはずが不一致となりました。

、、、というと「時分秒」で不一致になったんでしょ?と思われると思います。

時分秒にゼロをセットしてみました。それでも不一致。

cal1.set(2020,12,21,0,0,0);
cal2.set(2020,12,21,0,0,0);
System.out.println(cal1.compareTo(cal2)); // -1 (cal1 < cal2) やはり不一致

どやらミリ秒で差異が発生しているようです(getTimeInMillis()で確認)。

結局、日付だけで扱いたい場合「時分秒にそれぞれ0」をセットし、その後さらに「ミリ秒に0」をセットする必要があるようでした。

実行結果

ダサいコードであるとはわかっております。

スマートな方法があればお聞きしたい。

<外部リンク>Calendar (Java Platform SE 8)

Calendarクラスに良い思い出無いな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください