2013-12-21 174 views
2

我有3個組合框定義了日,月和年其用戶將輸入日期比較在JSP

<select name="date" style="width:inherit"> 
<%for(i=1;i<32;i++){%> 
<option value="<%=i%>"><%=i%></option> 
<%}%> 
</select> 
<span> 
<span style="width:50%"> 
<select name="month" style="width:inherit"> 

<option value="01">January</option> 
<option value="02">February</option> 
<option value="03">March</option> 
<option value="04">April</option> 
<option value="05">May</option> 
<option value="06">June</option> 
<option value="07">July</option> 
<option value="08">August</option> 
<option value="09">September</option> 
<option value="10">October</option> 
<option value="11">November</option> 
<option value="12">December</option> 

</select> 
</span> 

<span style="width:24%"> 
<select name="year" style="width:inherit"> 
<%for(i=2000;i<2015;i++){%> 
<option value="<%=i%>"><%=i%></option> 
<%}%> 
</select> 

之後,窗體發佈到doinsert.jsp並嘗試比較用戶輸入的日期和當天的日期。如果在今天之前用戶輸入的日期變量isPast應該是< 0.但是,當我嘗試輸入Dec 2013,2013(今天是2013年12月21日)變量isPast是-1這是正確的。當我嘗試輸入Dec 25,2013(今天是2013年12月21日)變量isPast仍然是-1這是錯誤的(應該是1)。當我嘗試輸入2014年1月1日(今天是2013年12月21日)時,變量isPast是1,這是正確的。我在doinsert.jsp中有以下代碼:

String date=request.getParameter("date"); 
    String month=request.getParameter("month"); 
    String year=request.getParameter("year"); 

    String concatdate=year+"-"+month+"-"+date; 
    SimpleDateFormat ft = new SimpleDateFormat("yyyy-mm-dd"); 
    java.sql.Date newdate= new java.sql.Date(ft.parse(concatdate).getTime()); 
    java.util.Date now=new java.util.Date(); 
    int isPast=0; 
    isPast=newdate.compareTo(now); 

怎麼了? newdatenow之間是否有任何不匹配的日期格式?

回答

3

剝離現在的日期的時間部分。

你的解析模式是錯誤的:yyyy-mm-dd。
它應該是yyyy-MM-dd。

你的兩個日期的類型也不同。
你以一種非常複雜的方式來完成這一切。
不要使用java.sql.Date,你不需要它。

只要使用java.util.Date和這種方法。

http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#compareTo%28java.util.Date%29

java.util.Date類已經擁有你所需要的。

對於剝離時間部分,你可以使用這樣的東西。

public static Date removeTime(Date date) { 
    if (date == null) 
     return null; 

    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    return cal.getTime(); 
} 
+0

很好的回答,剝離時間之後,日期可以比 – Keerthivasan

+0

仍然獲得<0,如果我輸入十二月25,2013 – noobprogrammer

+0

@noobprogrammer這也是錯誤的「YYYY-MM-DD」應爲「YYYY- MM-dd「 –