たぶん使い方が悪かった。悪かったとはいえはまった。
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クラスに良い思い出無いな。