Änderungen im Datumsformat von Java - schon wieder!

vorhergehende Artikel in: Java
25.02.2018

Ich habe bereits über einen Bug in Java9 berichtet, der mich ziemlich überrascht hat. Wer aber beschreibt meine Überraschung, dass der Bug, der mich beim Umstieg von Java7 auf Java8 bereits angespuckt hat, wieder Speichel gesammelt hat?

Zunächst: ja, ich hätte drauf gefasst sein müssen, schließlich ging es mir beim Umstieg auf Java8 genauso.

Ich erstelle ja die Inhalte meiner Heimatseite im Zwischennetz mittels eines von mir selbst entwickelten und gepflegten statischen CMS. Als ich begann, Java9 zu testen, stellte ich komplett um - damit lief das statische CMS dann auch damit. Ich fand einen Bug in Java9 und wollte eine neue Version der Webseite online stellen.

Wer beschreibt mein Erstaunen als mein CMS - wie beim Umstieg von Java7 auf Java8 - alle Seiten mit neuen Erzeugungsdaten versah obwohl deutlich das originale bereits drin stand. Das Programm konnte das alte Datumsformat nicht mehr parsen und schuld daran war die Umstellung auf Java9. Das Testprogramm, das ich beim Umstieg auf Java8 benutzte, demonstriert das:

public class DateBug extends java.lang.Object
{
	public static void main(java.lang.String[] args) throws java.text.ParseException
	{
		java.lang.String pattern="EEE, dd MMM yyyy H:m:s";
		java.text.DateFormat rssf = new java.text.SimpleDateFormat(
				pattern, java.util.Locale.GERMAN);
		System.out.println("Java Version "+System.getProperty("java.version"));
		System.out.println("SimpleDateFormat pattern; "+pattern);
		java.util.Calendar cal = java.util.Calendar.getInstance();
		cal.set(cal.MONTH, 2);
		System.out.println("Formatted Date: "+rssf.format(cal.getTime()));
	}
}

Dieses Programm mit unterschiedlichen Java-Versionen ausgeführt lieferte folgende Ergebnisse:

Java Version 1.7.0_25
SimpleDateFormat pattern; EEE, dd MMM yyyy H:m:s
Formatted Date: Di., 14 Mrz 2017 19:4:14

für Java7,

Java Version 1.8.0_144
SimpleDateFormat pattern; EEE, dd MMM yyyy H:m:s
Formatted Date: Di, 14 März 2017 19:13:14

für Java8 und

Java Version 9.0.4
SimpleDateFormat pattern; EEE, dd MMM yyyy H:m:s
Formatted Date: Do., 15 März 2018 19:37:33

für Java9.

Man bemerke den Unterschied im Monat. Der Punkt hinter dem abgekürzten Wochentag taucht bei den ungeraden Java-Versionen auf und in den geraden nicht (Bevor mich jemand auf die nicht ausreichende Größe meiner Stichprobe aufmerksam macht - ich verlinke hier gerne meinen liebsten Mathematikerwitz).

Außerdem interessant, dass der Monat in Java9 mit identischem Formatstring plötzlich ausgeschrieben wird. Als ob man in einer funktionierenden Anwendung die GUI ohne jede Notwendigkeit auf JavaFX umstellt - wie ein geschätzter Kollege sagen würde: "Weil ers kann!". Oder - gerade gestern auf GitHub gefunden: Meine neue liebste Commit-Meldung - "Broke the program, but will lead to improvements."

Hat man nun ein Datum mit Java7 erstellt, kann Java8 dieses nicht mehr parsen - erstellte man eines mit Java8, kann man es mit Java9 nicht parsen.

Ich bin mir durchaus bewusst, dass ich wahrscheinlich der einzige bin, der das deutsche Datumsformat benutzt, Daten formatiert und später wieder parst und dazu für die Formatierung des Monats "MMM" nimmt - trotzdem ist das für mich ein Bug und kein Feature!

Und nachdem das zweimal hintereinander passiert ist frage ich mich, ob mich hier jemand verscheißern will!

Diese Mal wollte ich das nicht auf sich beruhen lassen und habe einen Bug dafür eingestellt. Der ist momentan "under Review" - internal review ID: 9052724.

Aktualisierung vom 25. Februar 2018

Der Bug wurde unter JDK-8198491 in die Java Bug Database aufgenommen. Er wurde auch sofort als gelöst markiert - ich habe dadurch aber wieder etwas über Java gelernt - dadurch hat sich die ganze Aktion für mich definitiv gelohnt:

In JDK 9, the default locale data uses data derived from the Unicode Consortium's Common Locale Data Repository (CLDR). So there are changes with respect to some locales and hence this exception. To use the JRE locale with JDK 9 set java.locale.providers to a value with COMPAT ahead of CLDR. :

-Djava.locale.providers=COMPAT, CLDR

Artikel, die hierher verlinken

Java9 Umstellung

16.04.2018

Die Umstellung auf Java9 in meinen eigenen Projekten ist abgeschlossen

Batik und Java9 Modulsystem = ☠

25.02.2018

Nachdem ich bereits über den einen oder anderen Bug in Verbindung mit Java 9 berichtet habe, habe ich bereits wieder einen gefunden - und wieder verbunden mit der ach so tollen Erfindung des Java-Modulsystems

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.