Java Resultset - 将java日期与SQL getDate()进行比较

时间:2013-01-16 16:44:38

标签: java swing datetime resultset

获取当前日期的代码:

SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
Date now = new Date();
String strDate = sdfDate.format(now);
return strDate;

搜索日期和返回结果的代码

try
   {     
        String x = cDate();

        ps = conn.prepareStatement(fill);
        rs = ps.executeQuery();

        int count = 0;

       while (rs.next()){
       Date dDate = rs.getDate("recDate");

        if (x.equals(dDate)){
            System.out.println("True);
            break;
        } 
        else {
            System.out.println("False");
            }
        }

   }
   catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
  }

以下代码搜索名称和返回结果

   try
   {     
        string attendant = txtName.getText();

        ps = conn.prepareStatement(fill);
        rs = ps.executeQuery();

        int count = 0;

       while (rs.next()){
       String bName = rs.getString("name");

        if (attendant.equals(bName){
            System.out.println("True);
            break;
        } 
        else {
            System.out.println("False");
            }
        }

   }
   catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
  }

我想要获得我的第二个代码,即搜索名称并返回结果以便正常工作。但至于日期搜索,即使我在SQL DB中有getDate(),它也会导致错误。

我做了一个System.out.println(x)和System.out.println(dDate)来验证格式,但事实证明它是正确的。

2013年1月17日 2013年1月17日

应返回“True”

编辑:

        java.util.Date now = new java.util.Date();
        java.sql.Date sqlDate = new java.sql.Date(now.getTime());

       I replace (x.equals(dDate)) to (sqlDate == dDate) but the result still return as false, any idea?

请帮助..

最后我明白了..

解决方案

       (Math.round(now.getTime() / 1000/3600/24) == Math.round(dDate.getTime() /1000/3600/24)

3 个答案:

答案 0 :(得分:1)

我认为问题是因为你试图将一个String与一个日期对象进行比较,虽然这些值是相同但两者都是不同的对象,但它们将是假的。

String x = cDate();
...
Date dDate = rs.getDate("recDate");
...
if(x.equals(dDate)){

equals方法的默认行为会比较对象引用是指向同一对象而不是基于值。

答案 1 :(得分:1)

在这一行:

x.equals(dDate)

x是String,dDate是java.sql.Date。 他们不等于。

答案 2 :(得分:1)

Java Date也包含时间信息。日期可能在几分钟甚至几秒钟内有所不同。要确保两个日期具有完全相同的值,您应该打印date.getTime(),其返回longJanuary 1, 1970, 00:00:00 GMT以来的毫秒值。如果你想比较,你应该将x从String转换为Date,然后执行以下操作:

  x.getTime() == dDate.getTime()

然而,如果你想比较年,月和日,你应该这样干:

  Math.round(x.getTime()/1000/3600/24) == Math.round(dDate.getTime()/1000/3600/24)

有关Java中日期比较的更多信息,请访问:Date Comparison using Java