Wir hatten vor kurzem einen merkwürdigen Fehler in der Produktionsumgebung (Testumgebungen funktionieren gut).java dateformat illegales Musterzeichen 'y'
java.lang.IllegalArgumentException: Illegal Muster Zeichen 'Y'
Dies wird durch den folgenden Code verursacht wird
SimpleDateFormat dateFormat = (SimpleDateFormat)DateFormat.getDateInstance();
dateFormat.applyLocalizedPattern("yyyy-MM-dd");
Dieser Fehler normalerweise ausgelöst wird, wenn beispielsweise 'Y' anstelle von ‚y unter Verwendung von ' für Jahr. Dies ist hier nicht der Fall, wie Sie oben sehen können. Ich bin nicht 100% sicher, das Gebietsschema auf dem Server eingestellt. Linux env LANG ist auf "de_DE.UTF_8" eingestellt, daher wird dies wahrscheinlich verwendet.
Eingabe des Quellcodes von SimpleDateFormat.java Ich fand die Methode translatePattern(String pattern, String from, String to)
. Dies löst die Ausnahme aus, wenn ein beliebiges Zeichen in pattern
nicht in from existiert. Die Werte sieht wie folgt aus, wenn sie lokal Debuggen auf einem anderen Computer
pattern = "yyyy-MM-dd"
from = "GyMdkHmsSEDFwWahKzZ"
Von der Ausnahme auf dem Server ist es offensichtlich, dass die erste ‚y 'existiert nicht in from
. from
wird von formatData.getLocalPatternChars()
abgerufen. Dies ist eine DateFormatSymbols
, die vom Gebietsschema auf dem Server initialisiert wird.
Gibt es sogar Gebietsschemas, die Formate ohne 'y' haben könnten? Dieser Fehler ist ohne Codeänderung aufgetreten, und von meinem Wissen her keine Änderung der Serverkonfiguration.
Was ist die genaue JVM, in der Sie laufen? –
java.vm.spezifikation.vendor: Sun Microsystems Inc. java.runtime.version: 1.6.0_37-b06 –
Und es ist identisch mit dem im Test ausgeführt? –