2012-11-18 35 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比较对象,而不是==。