比较java中的两个日期类型变量

时间:2012-11-18 10:30:29

标签: java

我在比较两种数据类型时发现了一些问题变量 - > 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)?

2 个答案:

答案 0 :(得分:2)

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

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

然后确保你比较正确的事情 - 你想要相同的日期,然后你应该丢弃小时,分钟和天。为此你可以使用:

  • 数学减去毫秒
  • java.util.Calendar的{​​{1}}方法。
  • joda-time .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来比较对象,而不是==。