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"/> '/>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!