java Date装成英文String后,无法再转回Date的解决方案
这是同事遇到的一个问题。
代码中的Date,放到页面上的格式为“FriMar2109:20:38CST2014”(不显示,只为传递到下一个controller),
再次提交表单时,Dto类的 privateDatestartTime;没有被set进值。
用本地程序做了一下实验
publicstaticvoidmain(String[]args){
Datenow=newDate();
System.out.println(now);
StringnowStr=now.toString();
DateFormatformat=newSimpleDateFormat("EEEMMMddHH:mm:sszyyyy");
DateparsedNow=null;
try{
parsedNow=format.parse(nowStr);
System.out.println(parsedNow);
}catch(ParseExceptione){
e.printStackTrace();
}
}
程序执行format.parse(nowStr)时报错
Java.text.ParseException:Unparseabledate:"FriMar2109:25:48CST2014"
atjava.text.DateFormat.parse(DateFormat.java:337)
分析和查看源码后得出结论,由系统所使用的语言导致的错误。
DateFormatformat=newSimpleDateFormat("EEEMMMddHH:mm:sszyyyy");
默认其实是
DateFormatformat=newSimpleDateFormat("EEEMMMddHH:mm:sszyyyy",newLocale(System.getProperty("user.language")));
其中System.getProperty("user.language")由于系统是中文,所以为zh,应该是中文时区不支持此种format。
修改上面的代码验证此观点
publicstaticvoidmain(String[]args){
Datenow=newDate();
System.out.println(now);
StringnowStr=now.toString();
DateFormatformat=newSimpleDateFormat("EEEMMMddHH:mm:sszyyyy",newLocale(System.getProperty("user.language")));
System.out.println(System.getProperty("user.language"));
DateparsedNow=null;
try{
parsedNow=format.parse(nowStr);
System.out.println(parsedNow);
}catch(ParseExceptione){
format=newSimpleDateFormat("EEEMMMddHH:mm:sszyyyy",Locale.ENGLISH);
try{
System.out.println("newformatby'en'");
System.out.println(format.parse(nowStr));
}catch(ParseExceptione1){
e1.printStackTrace();
}
}
}
另一种解决方案是,在jsp页面中,对日期格式进行一次转换,如
<inputtype="hidden"name="data"value='
<fmt:formatDatevalue="${dto.date}"pattern="yyyy-MM-dd"/>
'/>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!