Ich hole den Thread mal wieder hervor, denn seit Lollipop gibt es da wohl wieder eine Änderung ... JUHU !
Na einigem Suchen im Debugger habe ich herausgefunden was der Grund für den Fehler war.
Von Version zu Version wurden scheinbar die "shortMonthNames" geändert, und/oder die Logik, die für den Monat ein Substring-Matching macht.
Wenn man im Debugger die SimpleDateFormat Instanz inspiziert, sieht man den Array von Monatsnamen in voller, kurzer und standalone Schreibweise.
Also "Januar, Februar, März,..."
"Jan., Feb., Mär., Apr., Mai, Juni" (gemischt mit/ohne Punkt)
"Jan, Feb, Mär" (ohne Punkt)
Lustigerweise verwendet er strikt die Werte aus dem Array für "short" obwohl die aus dem Array für Standalone perfekt passen würden und ich habe auf die Schnelle auch nicht finden können wie man ihm sagt welche Reihe von Namen er verwenden soll.
Auch ist es komisch, dass die Notation mit und ohne Punkt gemischt wird und dass "Juni" ausgeschrieben wird.
Damit ist aber auch klar, warum meine Monate mit 3 Zeichen und OHNE Punkt nicht matchen.
Immerhin, kann man die Werte in diesen Arrays aber explizit setzen, so dass man mit folgendem Beispiel-Code ein konsistentes Verhalten über alle Versionen bekommen sollte. Hoffe ich zumindest
this.sdf = new SimpleDateFormat(datePattern, locale);
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
dateFormatSymbols.setShortMonths(
new String[] {"Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"});
sdf.setDateFormatSymbols(dateFormatSymbols);
— geändert am 14.06.2015, 12:40:59
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.