11

日付オブジェクトと比較しようとしています。唯一の問題は、日、月、年だけを比較したいということです。

/* toString output
mydate 2013-08-23
current date: Thu Aug 23 14:15:34 CEST 2013

日 ( 23-08-2013 ) だけを比較すると、日付は同じですが、 . after() . before() メソッドを使用している場合、日付は異なります。

日、月、年のみを簡単に比較するJavaメソッドはありますか、それとも各値を比較する必要がありますか?

4

12 に答える 12

3

残念ながら、コア Java API での日付のサポートは非​​常に脆弱です。Calendar日付から時間/タイムゾーン情報を削除するために使用できます。おそらく、それを行う別のメソッドを書きたいと思うでしょう。Java よりもはるかに優れているため、日付/時刻のサポートに Joda API を使用することもできます。

于 2013-08-23T12:22:33.163 に答える
2

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 などのメソッドを提供します。

于 2014-03-25T04:28:04.360 に答える
0

この先はどうですか

    String str="2013-08-23";
    Date date=new SimpleDateFormat("yyyy-MM-dd").parse(str);
    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    Calendar calNow=Calendar.getInstance();

    if(cal.get(Calendar.YEAR)>calNow.get(Calendar.YEAR)){
        // do something
    }if(cal.get(Calendar.MONTH)>calNow.get(Calendar.MONTH)){
        // do something
    }if(cal.get(Calendar.DATE)>calNow.get(Calendar.DATE)){
       // do something
    }
于 2013-08-23T12:27:16.883 に答える