【问题标题】:Comparing Database Date with Java Date [duplicate]将数据库日期与 Java 日期进行比较 [重复]
【发布时间】:2019-07-11 06:54:44
【问题描述】:

我正在使用 hibernate(更具体地说是 spring-jpa)构建一个应用程序。 我的模型类包含一个 java.util.Date 字段,我想根据日期字段过滤记录,忽略时间部分。

我尝试使用 spring-jpa 规范来实现这一点,但对于相等的操作,它总是返回 0 个对象

我进一步调试了这个问题,发现当hibernate返回字段类型为java.sql.timeStamp的对象时,我将它与java.util.Date进行比较,所以它永远不会匹配。

以下是我用于调试的示例代码

       List<EmployeeLeaves> l = empLeaveDao.findAll();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-DD");
        Date date = formatter.parse("2018-04-28");
        long time = date.getTime();
        date = new java.sql.Timestamp(time);

        for (EmployeeLeaves d : l) {
            System.out.println(d.getAppliedOn().getClass().getName());
            if (d.getAppliedOn().equals(date)) {
                System.out.println("==============" + d.getRecordId());
            }
        }
        return l;

仍然没有运气,因为两个日期对象永远不会匹配,因为 equals 方法永远不会返回 true。

谁能建议如何创建一个新的 Date 对象,以便它可以与数据库返回的 Date 对象相等。

【问题讨论】:

  • EmployeeLeaves 上的日期是什么类型的?
  • 它的 java.util.Date 但是当我从 DB 中检索它时,我得到了 java.sql.timestamp(我的表列是 Date 类型)
  • 我建议你不要使用SimpleDateFormatDateTimestamp。这些类设计不佳且早已过时,尤其是第一个类是出了名的麻烦。而是使用java.time, the modern Java date and time API。除非您有一个非常旧的 Spring JPA 版本,否则它应该能够很好地处理来自 java.time 的类型。我认为LocalDate 是您所追求的现代课程。

标签: java hibernate jpa date


【解决方案1】:

您可以使用此文章中的函数 Date.compareTo() enter link description here

我也用这个小代码 sn-p 进行了测试,它按预期工作

Date date = new Date();
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println(date.compareTo(sqlDate) == 0);

另外如果你使用java8,为什么不把Entity类中的日期类型改成LocalDate就不会出现这种问题呢?

【讨论】:

  • 我无法让它以任何有用的方式工作。您的代码 sn-p 正在比较具有相同毫秒值的两个 Date 对象(尽管可能来自 java.utiljava.sql 的两个不同的 Date 类)。毫无疑问,这会产生 0。这如何解决提问者的问题?
  • 它的工作原理是将新的SimpleDateFormat("yyyy-MM-DD"); 更改为新的SimpleDateFormat("yyyy-MM-dd");
  • 这个答案使用了可怕的日期时间类,这些类在几年前被现代 java.time 类所取代,并采用了 JSR 310。
  • @BasilBourque 这就是为什么我推荐他使用 java 8 的 LocalDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多