我在比较两种数据类型变量 -> 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();
然后我尝试比较两个日期:
if(dataSql != myDataEntity.getDate()){
System.out.println("different");
}else{
System.out.println("these same");
}
结果是,这两个日期总是不同的。但是当我打印这两个数据的值时,我得到了相同的值:
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)?
最佳答案
首先,使用 .equals(..)
比较非原始对象 - someDate.equals(anotherDate)
使用 ==
比较它们的 jvm 身份 - 即它们是否是堆上的同一对象,而不是它们的值。
然后确保你比较的是正确的东西 - 你想要相同的日期,那么你应该放弃小时、分钟和天。为此,您可以使用:
- 减去毫秒的数学
java.util.Calendar
的.set(..)
方法。- joda-time
DateMidnight
- 最佳选择
关于java - 比较java中的两个日期类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439311/