Calendarクラス、便利ですよね。
Androidアプリで日時を扱うときには必須のクラスですが、ググッてもあまり出てこない情報があります。
それは「ミリ秒の設定」についてです。
例えば、Calendarクラスの日時を「2001年2月3日 4時56分」に設定するとします。
すると、たいていのサイトでは
Calendar calendar = Calendar.getInstance(); calendar.set(2001, 1, 3, 4, 56, 0);
と解説してあると思います。
また、一方で、2つの異なるCalendarクラスを比較して、どちらが未来かを判別する場合は、こう書かれています。
int different = calendar1.compareTo(calendar2);
これで、differentが0になれば同じ日時、正の値になればcalendar1の方が未来、負の値になればcalendar2の方が未来ということになります。
では、試しにこのコードを実行してみてください。
Calendar calendar1 = Calendar.getInstance(); calendar1.set(2001, 1, 3, 4, 56, 0); Calendar calendar2 = Calendar.getInstance(); calendar2.set(2001, 1, 3, 4, 56, 0); int different = calendar1.compareTo(calendar2);
calendar1も、calendar2も、同じく「2001年2月3日 4時56分」に設定しました。
しかし、differentに返ってきた結果は0ではないはず。おそらく、「calendar2の方が未来」という結果になったかと思います。
それは、ミリ秒の設定を行っていないからです。
Calendarクラスにミリ秒を設定を設定するには以下のようにします。
Calendar calendar1 = Calendar.getInstance(); calendar1.set(2001, 1, 3, 4, 56, 0); calendar1.set(Calendar.MILLISECOND,0); Calendar calendar2 = Calendar.getInstance(); calendar2.set(2001, 1, 3, 4, 56, 0); calendar2.set(Calendar.MILLISECOND,0); int different = calendar1.compareTo(calendar2);
これで、はじめてdifferentが0なります。
Calendarクラスを利用して日時比較をする際は、この点に気を付けてください!
コメントを残す