Ä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

  • CI/CD mit shellcheck

    13.10.2019

    Ich habe mich entschlossen, in meinen diversen Shell-Projekten shellcheck als Mittel zur Qualitätssicherung einzusetzen.

    Weiterlesen...

Neueste Artikel

  • Linux-System SBOM visualisiert als Graph

    In meinem $dayjob kam neulich die Frage auf, ob es möglich wäre, die aktuelle Softwareinstallation eines Linux-Systems als Software Bill of Materials (SBOM) zu exportieren.

    Weiterlesen...
  • Visualisierung von Datenmodellen als gerichtete Graphen

    Ich habe - motiviert durch meine Experimente zur Visualisierung von Paketabhängigkeiten in Linux-Installationen als interaktive Graphen - versucht, relationale Datenmodelle in ähnlicher Form zu visualisieren und dazu zwei Plugins für die sQLshell geschrieben.

    Weiterlesen...
  • Carl Sagan - Christmas Lectures at the Royal Institution

    Die Royal Institution hat in ihren Schätzen gegraben und die Christmas Lectures von Carl Sagan auf Youtube nochmals veröffentlicht. Meiner Ansicht nach unbedingt lohnenswert für alle, die Englisch verstehen!

    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.