35

2 つの日付を比較したいのですが、問題が発生しています。1 つの日付はjava.util.dateオブジェクトから作成され、もう 1 つは手動で作成されます。次のコードは例です。

Date ds = new Date();
DateTime d = new DateTime(ds);

DateTime e = new DateTime(2012,12,07, 0, 0);
System.out.println(d.isEqual(e));

しかし、テストは判明しましたfalse。時期のせいだと思います。これらの 2 つの日付が互いに等しいかどうかを確認するにはどうすればよいですか (年、月、日が同じであることを意味します)。

4

9 に答える 9

55
System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight()));

また

System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay()));
于 2012-12-07T13:35:22.747 に答える
3

時間コンポーネントを無視する場合 (つまり、日付のみを比較する場合)、Date Time の代わりに DateMidnight クラスを使用できます。したがって、例は次のようになります。

Date ds = new Date();
DateMidnight d = new DateMidnight(ds);

DateMidnight e = new DateMidnight(2012, 12, 7);
System.out.println(d.isEqual(e));

ただし、今日だけ「true」と出力されることに注意してください:)

また、デフォルトでは、JDK Date およびすべての Joda-Time インスタント クラス (DateTime および DateMidnight を含む) は、デフォルトのタイムゾーンを使用して構築されることに注意してください。したがって、コードで比較するために 1 つの日付を作成し、おそらく UTC で日付を格納する DB から別の日付を取得すると、UTC タイム ゾーンにいないと仮定すると、矛盾が発生する可能性があります。

于 2012-12-07T17:29:04.867 に答える
1

これらは DateTime オブジェクトであるため、それらを比較するときに時間部分も考慮されます。次のように、最初の日付の時刻部分を 0 に設定してみてください。

d = d.withTime(0, 0, 0, 0);
于 2012-12-07T13:34:19.207 に答える
-1
DateTimeComparator.getDateOnlyInstance().compare(obj1, obj2);

obj1 と obj2 は String、Long、Date(java.util) のいずれかです。詳細については、 http://www.joda.org/joda-time/apidocs/index.html? org/joda/time/DateTimeComparator を参照してください。 .html

于 2018-01-07T13:45:50.207 に答える
-5

独自のメソッドを作成する

public boolean checkEqual(DateTime first,DateTime second){
     if(first.<getterforyear> == second.<getterforyear> && first.<getterformonth> == second.<getterformonth> && first.<getterforday> == second.<getterforday>){
         return true;
  }
 return false;
}
于 2012-12-07T13:40:56.367 に答える