Dateの使い方
java.util.Dateのまとめ。Java SE 8よりDate And Time APIに変換するため、Instantの出力とInstantによる生成が可能になる。
Java | Java SE 8 |
概要

DateはJavaにおける日時クラス。日時の計算などはCalendarで行うため、DateはUNIXエポック(1970年1月1日)からの経過時間を保持する役割(ぐらいしかない)。ただタイムゾーンの有無でCalendarとは異なるため、フィールドなどに利用することは多い。
Date And Time APIの登場により、そちらへ徐々に移行されると考えられる。ただベースの時間体系が全く異なり直接の相互変換もできないため、非推奨にならず維持はされていく可能性が高い(あくまで予想)。
主な特徴は次の通り。
-
日時を表すクラスで精度はミリ秒。タイムゾーンを持たない。
-
「Date」というわりには日付だけでなく時刻も表現できる。
-
ベースになっているのはUNIX時間で、保持しているミリ秒値はUNIXエポック(1970年1月1日)からの経過時間。
-
非推奨のメソッドが多い。後発でCalendarクラスを導入したので、ほとんどはCalendarで対応される。
-
toString()による出力ではデフォルトのタイムゾーンで出力される。ただタイムゾーンは表示されるだけで、保持はされていない。
-
Java SE 8よりDate And Time APIに変換するため、Instantの出力とInstantによる生成が可能になる。
基本的な使い方
生成
コンストラクタから生成すると現在日時のDateが生成できる。内部的には System.currentTimeMillis()から生成している。System.currentTimeMillis()でシステムの時間を取得できる。
Date date = new Date();
指定ミリ秒でも生成可能。このミリ秒はUNIXエポックからの経過時間。
long currentTimeMillis = System.currentTimeMillis();
Date date = new Date(currentTimeMillis);
比較
Dateにおける比較はミリ秒まで一致しないとtrueにならない。compareTo()も同様。
年月日だけで比較したい場合は、DateUtils#isSameDay()がオススメ(Commons Langではありますが)。
-
参考: DateUtils
Date firstDate = new Date();
Date secondDate = new Date(firstDate.getTime() + 1); //1ミリ秒進める
// 出力:false ミリ秒まで一致しないのでfalse
firstDate.equals(secondDate);
// 出力:-1 compareTo()も同様
firstDate.compareTo(secondDate);
出力
toString()による出力ではデフォルトのタイムゾーンによる表記で出力される。これは出力上そうしているだけで、あくまでもDateがタイムゾーンをもっていない。
Fri Jul 29 08:56:29 JST 2015
Date And Time APIへの変換
Java SE 8よりDate And Time APIが導入され、Date/CalendarもInstantを介してではあるが変換が可能になっている。詳しい変換方法は次のページにまとめた。
java.sqlパッケージの日時クラス

DBの日時項目に対応するためjava.sql下にjava.util.Dateを継承した「java.sql.Date」「java.sql.Time」「java.sql.Timestamp」クラスが定義されている。
「java.sql.Date」は「java.util.Date」と型名が同じなので注意する。インポートし間違える可能性が高い。インポートし間違えたとしても継承関係からコンパイルエラーにならない場合も多い。
Appendix A: 参考
Appendix B: 改訂履歴
-
v1.0, 2016-07-29: 初稿