1

IE 11で日付解析の問題が発生しています。Edgeでも発生しているようです。次のJavaコードを見てください。以下のコードは、フォームが送信されるコントローラメソッドの一部です。Internet Explorerのコントローラにフォームを送信すると、Java日付形式の解析機能が失敗する

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); 
stream.setAutoExpireDate(dateFormat.parse(request.getParameter("autoExpireDate"))); 

request.getParameter( "autoExpireDate")の出力は "05/30/2018"です。

解析は、その文字列を渡して、その特定の日付形式に呼び出されると、それは次のよう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 /エッジで、私は次のことを得続けますエラー:

Unparseable date: "‎05‎/‎30‎/‎2018" 

なぜこれが「解析不可能な」日付であるのか非常に混乱しています。同じ日付文字列は、アプリケーションからフォームを送信するときにChromeとFirefoxでうまく機能しているようです。

明らかに、parse関数のpos.index == 0は、値が渡されたときに0に等しくなりますが、どのような理由でですか?なぜIE/Edgeがこのように動作するのでしょうか?

不明な点がございましたらお詫び申し上げます。お気軽に質問してください。私はさらに明確にします。どんな助けでも大歓迎です。

よろしく、

MotoDave452

UPDATE:request.getParameter( "autoExpireDateは") "/ 2018分の30 05"、の違いをチェックアウト等しい文字列がありますがIEとChromeを比較した場合の実際の価値

IE:

enter image description here

クローム:

enter image description here

+3

私はあなたがJavaコードは、ブラウザの種類に依存してはならないことを知っていると確信しています。 :)悪いケースや良いケースでは、実際に文字列(ソース)の内部にあるものを深くチェックしてください。彼らは異なっていなければなりません。類似している場合はgetChars()をチェックしてください。 –

+0

私は確かに認識していますが、明確にしていただきありがとうございます:)私はそれがサーバー側のコントローラメソッドに渡されているときに、IEが "autoExpireDate"のリクエストパラメータ値をどのように処理しているのだろうと考えています。詳細については、以下の回答への私の回答をご覧ください。 – MotoDave452

+0

上記のオリジナルの質問に投稿した更新を見ることもできます。 @Evgeny Zhuravlev氏の洞察をいただきありがとうございます。私の問題を解決するのに役立ちました。 – MotoDave452

答えて

1

IE 11日Parserでの問題があり、あなたは交換する必要があり、それが意味する、Unicode文字が好きではありません。これらのようなもので

Date dateStr = new Date().toLocaleString().replace(/[^A-Za-z 0-9 \.,\?""[email protected]#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, ''); 
Date date = new Date(dateStr); 

非アスキー文字を避ける

+0

これは、IEのリクエストヘッダーでautoExpireDateが次のように渡されるのがなぜですか:autoExpireDate =%E2%80%8E05%E2%80%8E%2F%E2%80%8E30%E2%80%8E%2F% E2%80%8E2018?しかし、Chromeでは次のようになります:autoExpireDate = 05%2F30%2F2018? – MotoDave452

+1

はい、そうだと思います。詳細はこちら[投稿](https://www.csgpro.com/blog/2016/08/a-bad-date-with-internet-explorer-11-trouble-with-new -unicode-characters-in-javascript-date-strings)! :D –

+1

私はあなたがここで何かに間違いないと思います。これが私にとってうまくいくかどうかを確認するために、あなたが提供した情報で遊んでいきます。それは非常に感謝しています:) – MotoDave452

2

あなたの日付に印刷可能な文字が追加されているようです。次のことを試してみてください。

dateStr = source.replaceAll("\\p{C}", ""); 
関連する問題