2011-06-09 70 views
0

在我的应用程序中,我有一个textfield,它映射到操作类中的日期。如果我输入15/12/2011(MM/dd/yyyy),它会自动将其转换为2012年3月12日(MM/dd/yyyy)。Struts2 Java利用日期转换问题

我的代码是:

JSP页面:

<s:textfield name="drDt" id="drDt" /> 

Action类:

private Date drDt; 
public Date getDrDt() { 
    return drDt; 
} 

public void setDrDt(Date drDt) { 
    this.drDt = drDt; 
} 

问题是与代码:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 

sdf.parse(dateValue); 

上述说法有一定的问题。

+2

这就是SimpleDateFormat如何处理一些无效的日期。它将额外的时间转换为数天,多余的时间转换成数月,并将多余的时间转换为数年 – 2011-06-09 08:40:38

回答

1

这是“默认”行为。否则,请将dateFormat.setLenient()设置为false。如果设置为false,则会在遇到无效日期时抛出Exception,如您的示例中所示。你需要妥善处理。也许,向用户显示一条消息,表明输入的日期不正确或无效。准确地说,添加验证器来验证用户输入。

+0

我应该在哪里设置? – jaychapani 2011-06-09 08:54:34

+0

@jaychapani:必须进行某种转换。尝试寻找或等待....我在这上面。 – 2011-06-09 08:56:36

+0

将dateFormat.setLenient()设置为false后抛出:** java.text.ParseException:无法解析的日期:“15/12/2011”** exveption。 – jaychapani 2011-06-09 08:59:59

0

MM/dd/yyyy是月/日/年。 您写的15/12/2011,即15个月=(15 - 12)= 3 /天12和年+ 1(2011+ + 15的额外年份),因为15是无效月份。 尝试切换到dd/MM/yyyy