2012-11-18 37 views
1

我在比較兩個數據類型變量 - > java.sql.Date類型時發現了一些問題。在java中比較兩個日期類型變量

首先即時createing電流數據(YYYY-MM-DD):

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

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

Secoundly,從MySQL即時接收數據:

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

然後我試圖比較兩個日期:

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

而效果是,總是這兩個日期不同。但是,當我打印的這兩個DATAS的價值觀,我有同樣的價值觀:

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

效果:

2012-11-16 
2012-11-16 

但是,我發現一個問題:

,如果我做:

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

那麼如何比較兩個日期(yyyy-mm-dd)?

回答

2

首先,使用.equals(..)比較非基本對象 - someDate.equals(anotherDate)

使用==比較它們的JVM的身份 - 即,如果它們是在堆上同一個對象,而不是它們的值。

然後確保你比較正確的東西 - 你想要相等的日期,那麼你應該放棄小時,分鐘和日期。對於您可以使用:

  • 數學減去米利斯
  • java.util.Calendar.set(..)方法。
  • 喬達時間DateMidnight - 最好的選擇
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比較對象,而不是==。