2013/04/07
JavaのDateの時刻をリセットするメモ
時間ねたが続くが Java で Date から時刻をリセットして日付だけを取り出そうとしてはまったのでメモ。
日付関係の処理はややこしい。タイムゾーンとか夏時間とか閏秒とか訳分からん。
Java の場合は java.util.Calendar が一手に引き受けてくれるのだが こいつがまた曲者ではまった。
結論だけ欲しい人の為の正解、
static Date clearTime(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.clear(Calendar.AM_PM);
cal.clear(Calendar.HOUR);
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
return cal.getTime();
}
これで、もろもろの面倒を考えずに日付だけが取り出せる。
単純に考えると
cal.clear(Calendar.HOUR);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
だけで良さそうだがこれだとこうなる。
2013/04/07 14:00:00.000
AM_PM
リセットしても
cal.clear(Calendar.AM_PM);
こうだったりする。
2013/04/07 02:00:00.000
結局、AM_PM
をクリアしてから HOUR
と HOUR_OF_DAY
の両方をクリアする必要があるという謎な仕様。
普通に Calendar.clearTime()
が有っても良いと思うんだが...
この投稿へのコメント
コメント・フォーム