向Internet Explorer中的控制器提交表单时,Java日期格式解析函数失败
我在IE 11中遇到了日期解析的问题。它似乎也发生在边缘。请看一下下面的Java代码。下面的代码是表单提交到的控制器方法的一部分向Internet Explorer中的控制器提交表单时,Java日期格式解析函数失败,java,date,parsing,internet-explorer,model-view-controller,Java,Date,Parsing,Internet Explorer,Model View Controller,我在IE 11中遇到了日期解析的问题。它似乎也发生在边缘。请看一下下面的Java代码。下面的代码是表单提交到的控制器方法的一部分 DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); stream.setAutoExpireDate(dateFormat.parse(request.getParameter("autoExpireDate"))); request.getParameter(“autoExpireDate”)的输
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
stream.setAutoExpireDate(dateFormat.parse(request.getParameter("autoExpireDate")));
request.getParameter(“autoExpireDate”)的输出为“2018年5月30日”
当对该特定日期格式调用parse并传递该字符串时,它将点击以下DateFormat.java函数:
public Date parse(String source) throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException("Unparseable date: \"" + source + "\"" ,
pos.errorIndex);
return result;
}
出于某种原因,仅在IE/Edge中,我不断出现以下错误:
Unparseable date: "05/30/2018"
我很困惑为什么这是一个“不可接受的”日期。当我通过应用程序提交表单时,相同的日期字符串似乎可以与Chrome和Firefox配合使用
显然,当传递值时,解析函数中的pos.index==0等于0,但原因是什么?为什么IE/Edge会有这样的行为
如果有什么不清楚的地方,我道歉。请随意提问,我将进一步澄清。非常感谢您的帮助
致以最良好的祝愿
MotoDave452
更新:While request.getParameter(“autoExpireDate”)是一个等于05/30/2018”,查看使用IE与Chrome时实际值的差异
即:
铬:
IE 11日期分析器有一个问题,它不喜欢unicode字符,这意味着,你必须用类似这样的东西来替换它们
Date dateStr = new Date().toLocaleString().replace(/[^A-Za-z 0-9 \.,\?""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, '');
Date date = new Date(dateStr);
Date dateStr=new Date().tolocalString().replace(/[^A-Za-z 0-9\,\?”“!@\\$%^&*\(\)-\\=\+;:\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[\]`*/g');
日期日期=新日期(dateStr);
为避免使用非asci字符,IE似乎正在向您的日期添加不可打印的字符。请尝试以下操作:
dateStr = source.replaceAll("\\p{C}", "");
我相信您知道java代码不应该依赖于浏览器类型。:)深入检查字符串(源代码)中的实际内容,以防好坏。它们必须不同。检查getChars()如果它们看起来相似,我当然知道,但谢谢你澄清:)我想这一定是IE处理“autoExpireDate”请求参数值的方式当它被传递到服务器端控制器方法时。请参阅我对下面答案的回复以了解更多信息。您也可以看到我在上面的原始问题上发布的更新。感谢您的见解@Evgeny Zhuravlev它有助于解决我的问题。这就是为什么我看到autoExpireDate被传递为以下内容的原因吗n我在IE中的请求头:autoExpireDate=%E2%80%8E05%E2%80%8E%2F%E2%80%8E30%E2%80%8E%2F%E2%80%8E2018?但在Chrome中,它看起来如下:autoExpireDate=05%2F30%2F2018?是的,我想是的,更多信息请查看此!我想你肯定在这里找到了什么。我将对你提供的信息进行一些处理,看看这是否正确非常感谢:)我看到了你的更新,现在错误可以看得很清楚了。