Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向Internet Explorer中的控制器提交表单时,Java日期格式解析函数失败_Java_Date_Parsing_Internet Explorer_Model View Controller - Fatal编程技术网

向Internet Explorer中的控制器提交表单时,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”)的输

我在IE 11中遇到了日期解析的问题。它似乎也发生在边缘。请看一下下面的Java代码。下面的代码是表单提交到的控制器方法的一部分

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?是的,我想是的,更多信息请查看此!我想你肯定在这里找到了什么。我将对你提供的信息进行一些处理,看看这是否正确非常感谢:)我看到了你的更新,现在错误可以看得很清楚了。