获取当前日期的代码:
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)
答案 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()
,其返回long
自January 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