JSP中的日期比较

时间:2013-12-21 09:18:23

标签: java html sql jsp date

我有3个组合框定义了用户输入的日期,月份和年份

<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。但是,当我尝试输入2013年12月20日(今天是2013年12月21日)时,变量isPast为-1,这是正确的。当我尝试输入2013年12月25日(今天是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之间是否存在任何不匹配的日期格式?

1 个答案:

答案 0 :(得分: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();
}