2012-01-31 78 views
0

我需要比较查询中的两个值(日期)。无法在日期中传递空值

String myFormatString = "yyyyMMdd"; 
SimpleDateFormat df = new SimpleDateFormat(myFormatString); 

(查询)

Date date1 = df.parse(rs.getString(8)); 
Date date2= df.parse(rs.getString(9)); 

其实我可以从查询我想要的值(日期),并能进入 日期1和date2。但是当我从date2的数据库得到空值时, 我得到'NullPointerException'错误。我需要比较日期1和日期2,然后 将设置要报告的较大日期。任何想法?


尊敬的各位,感谢您的建议。这对我很有帮助。最后我找到了解决的办法。

try { 
     Date date1 = df.parse(rs.getString(8)); 
     Date date2 = df.parse(rs.getString(9)); 
     if(date1.compareTo(date2) > 0) 
     { Date = rs.getString(8); 
     } 
     else if(date1.compareTo(date2) < 0) 
     { 
      Date = rs.getString(9); 
      } 
      else 
      { 
     Date = rs.getString(8); 
      } 


     } catch (NullPointerException ex) { 
     Date=rs.getString(8); 
     } 
+0

不应该是你的日期格式类似这样的'YYYY-MM-dd'? – Lion 2012-01-31 03:16:34

回答

0

Date对象不接受空构造。您可能需要先创建临时变量,并确保它们不为空。如果其中一个为空,可能可以说其他人的规模较大(如果这就是您所期待的&您的业务逻辑是?)。

Date date1 = null; 
if((rs.getString(8)!=null) && (!"".equals(rs.getString(8)))) 
{  
date1 = df.parse(rs.getString(8)); 
} 

Date date2 = null; 
if((rs.getString(9)!=null) && (!"".equals(rs.getString(9)))) 
{  
date2 = df.parse(rs.getString(9)); 
} 

然后做DATE1 & DATE2之间的日期比较。

+0

嗨,感谢您的帮助。当我比较时,它也会得到那个NullPointerException错误。如果(date1.compareTo(date2)> 0)\t \t \t \t \t System.out.println(“第二个日期在第一个日期之前初始化”); \t \t \t \t \t否则如果(date1.compareTo(DATE2)<0) \t \t \t \t \t的System.out.println( “第二日期是第一个日期之后初始化”); \t \t \t \t \t其他 \t \t \t \t \t的System.out.println( “第一个日期和第二次约会是平等的”);我该怎么办? – Bella 2012-01-31 04:08:25

+0

我现在编辑了我的代码。试试看,!符号应该在里面,因为看起来如果块没有被执行。 – kosa 2012-01-31 04:16:40

+0

真的很感谢你们。 – Bella 2012-02-01 01:22:23

1

解析之前,你检查日期字符串是否为空或不是,

Date date1 = null; 
Date date2 = null; 
if((rs.getString(8)!=null) && !(rs.getString(8).equals(""))){ 
    date1 = df.parse(rs.getString(8)); 
} 

if((rs.getString(9)!=null) && !(rs.getString(9).equals(""))){ 
    date2 = df.parse(rs.getString(9)); 
} 
1

如果您的数据是这样的,有当数据库将返回nulldate2案件,那么这将是一个好主意,使用异常处理:

try { 
    Date date1 = df.parse(rs.getString(8)); 
    Date date2 = df.parse(rs.getString(9)); 
    ... 
} catch (NullPointerException ex) { 
    // Do something/nothing if date2 is null 
} 
+0

非常感谢你Dawood。 – Bella 2012-02-01 01:22:43

+0

不客气! – Dawood 2012-02-01 02:28:18

0

你不能把空值的日期目的。如果您为日期传递空值,则无法比较日期。在这种情况下,你需要处理异常。

Date yourReportDate = new Date(); 

    try { 
     Date date1 = df.parse(rs.getString(8); 
     Date date2 = df.parse(rs.getString(9); 

     if(date1.getTime()>date2.getTime()) 
     { 
      yourReportDate.setTime(date1.getTime()); 
     }else 
     { 
      yourReportDate.setTime(date2.getTime()); 
     } 
    } catch (Exception e) {   
     e.printStackTrace(); 
    }