2

2 つのデータ型 Variable -> java.sql.Date 型の比較でいくつかの問題が見つかりました。

まず、現在のデータ (yyyy-mm-dd) を作成しています:

java.util.Date date = new java.util.Date();

java.sql.Date dateSql = new Date(date.getTime());

次に、MySQL からデータを受信して​​います。

MyDataEntity myDataEntity = session.getNamedQuery(MyDataEntity.GET_ELEMENT).uniqueResult();

次に、2 つの日付を比較しようとしています。

if(dataSql != myDataEntity.getDate()){
System.out.println("different");
}else{
System.out.println("these same");
}

その結果、これら 2 つの日付は常に異なります。しかし、これら 2 つのデータの値を出力すると、同じ値が得られます。

System.out.println(dataSql);
System.out.println(myDataEntity.getDate);

効果:

2012-11-16
2012-11-16

しかし、私は1つの問題を見つけました:

私が作る場合:

long date1 = dateSql.getTime();  // print 1353106800000
long date2 = myDataEntity.getDate().getTime(); // print 1353234605091

では、2 つの日付 (yyyy-mm-dd) を比較するにはどうすればよいでしょうか。

4

2 に答える 2

2

まず、.equals(..)非プリミティブ オブジェクトを比較するために使用します。someDate.equals(anotherDate)

Using==は、jvm ID を比較します。つまり、値ではなく、ヒープ上の同じオブジェクトであるかどうかを比較します。

次に、正しいものを比較してください。同じ日付が必要な場合は、時間、分、日を破棄する必要があります。そのためには、次を使用できます。

  • ミリ秒を減算する数学
  • java.util.Calendar.set(..)メソッド。
  • joda-time DateMidnight- 最良のオプション
于 2012-11-18T10:35:01.400 に答える
0

これはよく知られた問題です。java.sql.Date オブジェクトは、日付オブジェクトの下端にある精度を削除します (出力の最後にあるすべてのゼロを参照してください)。したがって、java.util.Date と java.sql.Date の間の精度を正規化する必要があります。

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

ああ、オブジェクトの比較には == ではなく .equals を使用してください。

于 2012-11-18T10:35:39.733 に答える