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();

然后我试图比较两个日期:

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)?

4

2 回答 2

2

首先,.equals(..)用来比较非原始对象——someDate.equals(anotherDate)

Using==比较它们的 jvm 标识——即它们是否是堆上的同一个对象,而不是它们的值。

然后确保你比较正确的东西——你想要相同的日期,然后你应该放弃小时、分钟和天。为此,您可以使用:

  • 数学减去毫秒
  • 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 回答