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

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

最佳答案

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

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

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

  • 减去毫秒的数学
  • java.util.Calendar.set(..) 方法。
  • joda-time DateMidnight - 最佳选择

关于java - 比较java中的两个日期类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439311/

相关文章:

java - 如何使用点幻灯片注册 Activity

java - 您可以向 "jaxb.index"文件添加注释吗?

java - 索引范围的上限是否总是假定为排他性的?

java - 当hashCode被覆盖时,Ignite如何执行cache.get()操作?

java - 双击jar并在Mac上的命令提示符下运行同一jar时的不同行为

java - 在eclipse中编译java程序

java - 如何替换 gradle 中依赖项的依赖项?

java - 为什么设置 expireAfterAccess 不起作用?

java - HTTP 状态 400 错误请求

java - JPA - 针对特定数据库用户执行查询