我有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);
怎么了? newdate
和now
之间是否存在任何不匹配的日期格式?
答案 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();
}