Datum auf Swing-Komponenten ausgeben: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Die Formatierung von Text-Ausgaben von Objekten auf GUI-Komponenten können von  speziell dafür bereitgestellte Klassen deutlich vereinfacht werden.
+
==String.format()==
 +
Die Formatierung von Text-Ausgaben von [[Objekt|Objekten]] auf GUI-Komponenten können von  speziell dafür bereitgestellte [[Klasse|Klassen]] deutlich vereinfacht werden.
  
 +
===Beispiel 1===
 
Eine recht einfache Variante, schnell und komfortabel ein Datum auf einer Swing-Komponente, wie bspw. einem {{JAPI|JLabel}}, auszugeben, sieht folgendermaßen aus:
 
Eine recht einfache Variante, schnell und komfortabel ein Datum auf einer Swing-Komponente, wie bspw. einem {{JAPI|JLabel}}, auszugeben, sieht folgendermaßen aus:
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
String dateStr = String.format("%1$te. %1$tb %1$tY", new Date());
+
String dateStr = String.format("%1$te. %1$tB %1$tY", new Date());
 
JLabel label = new JLabel(dateStr);
 
JLabel label = new JLabel(dateStr);
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Die Ausgabe sieht dann in etwa so aus:
+
Die Ausgabe sieht dann so aus:
  
 
<code>8. Mai 2014</code>
 
<code>8. Mai 2014</code>
 +
 +
===Beispiel 2===
 +
<syntaxhighlight lang="java">
 +
String.format("%1$td.%1$tm.%1$tY - %1$tH:%1$tM:%1$tS", new Date());
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>10.05.2014 - 14:27:02</code>
 +
 +
===Beispiel 4===
 +
<syntaxhighlight lang="java">
 +
String.format("%ta, %1$te. %1$tb %1$tY - %1$tT", System.currentTimeMillis());
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>So, 2. Juni 2019 - 13:25:01</code>
  
 
Die Formatierung der Ausgabe lässt sich nahezu beliebig anpassen. Mehr zu den Formatierungsmöglichkeiten von Strings unter {{JAPI|java.util.Formatter}}.
 
Die Formatierung der Ausgabe lässt sich nahezu beliebig anpassen. Mehr zu den Formatierungsmöglichkeiten von Strings unter {{JAPI|java.util.Formatter}}.
 +
 +
==DateFormat==
 +
Mit Hilfe der Klasse {{JAPI|DateFormat}} lassen sich {{JAPI|Date}}- oder {{JAPI|Calendar}}-Objekte für Textausgaben formatieren.
 +
<syntaxhighlight lang="java">
 +
DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss");
 +
String dateText = formatter.format(new Date());
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>10.05.2014 - 14:27:02</code>
 +
 +
==java.time==
 +
Die meisten [[Methode|Methoden]] in der [[Klasse]] java.util.Date sind inzwischen deprecated. Oracle selbst spricht von schlechtem API-Design und Problemen mit der Nebenläufigkeit.
 +
 +
In der mit Java 8 eingeführten Time-[[API]] sind nun deutlich bessere und mächtigere Klassen zur Arbeit mit Datum und Zeit zur Verfügung gestellt worden.
 +
 +
===LocalDateTime===
 +
Die Klasse {{JAPI|LocalDateTime}} repräsentiert ein unveränderliches Datum-Uhrzeit-[[Objekt]] ohne Zeitzone im ISO-8601-Kalendersystem.
 +
 +
<syntaxhighlight lang="java">
 +
LocalDateTime ldt = LocalDateTime.now(); //ermittelt die komplette Zeiteinheit des aktuellen Zeitpunkts
 +
</syntaxhighlight>
 +
 +
Das so erzeugte Objekt kann nun vollständig anpassbar für die Ausgabe formatiert werden:
 +
 +
===Beispiel 1===
 +
<syntaxhighlight lang="java">
 +
System.out.println(ldt);
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>2020-02-20T12:06:30.802378</code>
 +
 +
===Beispiel 2===
 +
<syntaxhighlight lang="java">
 +
String format = ldt.format(DateTimeFormatter.ofPattern("dd.MM.yyyy - HH:mm:ss"));
 +
System.out.println(format);
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>20.02.2020 - 12:07:34</code>
 +
 +
===Beispiel 3===
 +
<syntaxhighlight lang="java">
 +
String format = ldt.format(DateTimeFormatter.ofPattern("d. MMM yyyy"));
 +
System.out.println(format);
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>20. Feb. 2022</code>
 +
 +
===Beispiel 4===
 +
<syntaxhighlight lang="java">
 +
String format = ldt.format(DateTimeFormatter.ofPattern("MMMM"));
 +
System.out.println(format);
 +
</syntaxhighlight>
 +
 +
Die Ausgabe sieht dann so aus:
 +
 +
<code>Februar</code>
  
 
[[Kategorie:Swing]]
 
[[Kategorie:Swing]]
 
[[Kategorie:Java_Grundlagen]]
 
[[Kategorie:Java_Grundlagen]]
 +
[[Kategorie:Java-Codeschnipsel]]

Aktuelle Version vom 20. Februar 2022, 11:14 Uhr

String.format()

Die Formatierung von Text-Ausgaben von Objekten auf GUI-Komponenten können von speziell dafür bereitgestellte Klassen deutlich vereinfacht werden.

Beispiel 1

Eine recht einfache Variante, schnell und komfortabel ein Datum auf einer Swing-Komponente, wie bspw. einem JLabel, auszugeben, sieht folgendermaßen aus:

String dateStr = String.format("%1$te. %1$tB %1$tY", new Date());
JLabel label = new JLabel(dateStr);

Die Ausgabe sieht dann so aus:

8. Mai 2014

Beispiel 2

String.format("%1$td.%1$tm.%1$tY - %1$tH:%1$tM:%1$tS", new Date());

Die Ausgabe sieht dann so aus:

10.05.2014 - 14:27:02

Beispiel 4

String.format("%ta, %1$te. %1$tb %1$tY - %1$tT", System.currentTimeMillis());

Die Ausgabe sieht dann so aus:

So, 2. Juni 2019 - 13:25:01

Die Formatierung der Ausgabe lässt sich nahezu beliebig anpassen. Mehr zu den Formatierungsmöglichkeiten von Strings unter java.util.Formatter.

DateFormat

Mit Hilfe der Klasse DateFormat lassen sich Date- oder Calendar-Objekte für Textausgaben formatieren.

DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss");
String dateText = formatter.format(new Date());

Die Ausgabe sieht dann so aus:

10.05.2014 - 14:27:02

java.time

Die meisten Methoden in der Klasse java.util.Date sind inzwischen deprecated. Oracle selbst spricht von schlechtem API-Design und Problemen mit der Nebenläufigkeit.

In der mit Java 8 eingeführten Time-API sind nun deutlich bessere und mächtigere Klassen zur Arbeit mit Datum und Zeit zur Verfügung gestellt worden.

LocalDateTime

Die Klasse LocalDateTime repräsentiert ein unveränderliches Datum-Uhrzeit-Objekt ohne Zeitzone im ISO-8601-Kalendersystem.

LocalDateTime ldt = LocalDateTime.now(); //ermittelt die komplette Zeiteinheit des aktuellen Zeitpunkts

Das so erzeugte Objekt kann nun vollständig anpassbar für die Ausgabe formatiert werden:

Beispiel 1

System.out.println(ldt);

Die Ausgabe sieht dann so aus:

2020-02-20T12:06:30.802378

Beispiel 2

String format = ldt.format(DateTimeFormatter.ofPattern("dd.MM.yyyy - HH:mm:ss"));
System.out.println(format);

Die Ausgabe sieht dann so aus:

20.02.2020 - 12:07:34

Beispiel 3

String format = ldt.format(DateTimeFormatter.ofPattern("d. MMM yyyy"));
System.out.println(format);

Die Ausgabe sieht dann so aus:

20. Feb. 2022

Beispiel 4

String format = ldt.format(DateTimeFormatter.ofPattern("MMMM"));
System.out.println(format);

Die Ausgabe sieht dann so aus:

Februar