tl;dr
日、月、年だけを比較したい。
マイデート 2013-08-23
現在の日付: 2013 年 8 月 23 日木曜日 14:15:34 CEST
現在の日付を動的にキャプチャする場合。
LocalDate.now( // Capture the current date…
ZoneId.of( "Europe/Paris" ) // …as seen by the wall-clock time used by the people of a particular region (a time zone).
)
.isEqual(
LocalDate.parse( "2013-08-23" )
)
または、特定の瞬間。
ZonedDateTime.of( // Thu Aug 23 14:15:34 CEST 2013
2013 , 8 , 23 , 14 , 15 , 34 , 0 , ZoneId.of( "Europe/Paris" )
)
.toLocalDate() // Extract the date only, leaving behind the time-of-day and the time zone.
.isEqual(
LocalDate.parse( "2013-08-23" )
)
LocalDate
バンドルされている java.util.Date および .Calendar クラスは厄介なことで有名です。それらを避けてください。他の回答が示唆するように、まともな日時ライブラリを使用してください。つまり、次のいずれかです。
時刻を無視するには、日時から日付のみの値を抽出する必要があります。Joda-Time と java.time の両方に、偶然にも という名前のクラスがありLocalDate
ます。
java.time
Java 8 以降に組み込まれたjava.timeフレームワークは、古い java.util.Date/.Calendar クラスに取って代わります。新しいクラスは、大成功を収めたJoda-Timeフレームワークから着想を得ており、その後継として意図されており、コンセプトは似ていますが、再構築されています。JSR 310で定義されています。ThreeTen-Extraプロジェクトによって拡張されました。チュートリアルを参照してください。
ZoneId zoneId = ZoneId.of( "Europe/Paris" );
ZonedDateTime x = ZonedDateTime.of( 2014, 1, 2, 3, 4, 5, 6, zoneId );
ZonedDateTime y = ZonedDateTime.now( zoneId );
を呼び出して、日時の日付のみの部分を抽出して比較しますtoLocalDate
。
Boolean isSameDate = x.toLocalDate().isEqual( y.toLocalDate() );
Joda-Time
DateTimeZone timeZoneParis = DateTimeZone.forID( "Europe/Paris" );
DateTime x = new DateTime( 2014, 1, 2, 3, 4, 5, 6, timeZoneParis );
DateTime y = new DateTime( 2014, 6, 5, 4, 3, 2, 1, timeZoneParis );
boolean isXAfterY = x.isAfter( y );
日付部分が等しいかどうかをテストするには、DateTime オブジェクトを、LocalDate
時刻またはタイム ゾーン (日付を決定するために使用されるタイム ゾーン以外) なしで日付のみを記述する に変換します。
boolean isSameDate = x.toLocalDate().isEqual( y.toLocalDate() );
構成要素を調べたい場合、Joda-Time はdayOfMonth、 hourOfDay などのメソッドを提供します。