Из javadoc Calendar.before(Object when)
:
Возвращает, представляет ли этот календарь время до времени, представленного указанным объектом. Этот метод эквивалентен:
compareTo(when) < 0
тогда и только тогда, когда используется экземпляр календаря. В противном случае метод возвращает false.
Почему он принимает объект, если кто-то передает что-то, что не экземпляр календаря, он возвращает false? Почему бы просто не принять экземпляр календаря? Это заставило меня наблюдать за неправильными результатами в функциональности довольно долгое время.