我在比较两种数据类型时发现了一些问题变量 - > 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)?
答案 0 :(得分:2)
首先,使用.equals(..)
比较非原始对象 - someDate.equals(anotherDate)
使用==
比较它们的jvm标识 - 即它们是否是堆上的同一个对象,而不是它们的值。
然后确保你比较正确的事情 - 你想要相同的日期,然后你应该丢弃小时,分钟和天。为此你可以使用:
java.util.Calendar
的{{1}}方法。.set(..)
- 最佳选择答案 1 :(得分: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来比较对象,而不是==。