Wie kann das aktuelle Datum ausgegeben und formatiert werden?
Bis Java 7
Im Beispiel werden zwei Methoden deklariert, die einen kleinen
Einblick in die Themenstellung geben. die erste Methode printGregorianCalendarDate()
demonstriert das Verfahren mit Hilfe der Klasse GregorianCalendar
. Sie stellt eine Konkretion der abstrakten Klasse Calendar
dar, die sehr umfangreiche Möglichkeiten bietet, um Zeit- und
Datumsfelder zu manipulieren. Für weitere Informationen muss
aufgrund des riesigen Umfangs der Möglichkeiten an dieser
Stelle auf die Java Dokumentation verwiesen werden, die besonders im
Kapitel GregorianCalendar zur Abwechslung auch einmal
einige Beispiele aufführt.
In der u.a. Methode wird durch Aufruf des parameterlosen
Konstruktors zunächst ein GregorianCalendar-Objekt erzeugt, das
die aktuelle Zeit im Format der systemweiten Landeseinstellung
repräsentiert. Um eine adäquate Formatierung zu erhalten
wird die Klasse DateFormat
verwendet, die eine Reihe
statischer, teils überladener Methoden besitzt, um die
Formatierer der einzelnen Zeit- und Datums-Felder zu erhalten.
Diesen Methoden können statische int-Konstanten übergeben
werden, die über die Teile und die genaue Formatierung der
Ausgabe entscheiden. Die Basis bilden jedoch immer die durch die
Landeseinstellungen und die Zeitzone festgelegte Formatierung.
Noch flexibler ist die Klasse SimpleDateFormat, mit deren Hilfe u.a.
Datum-Strings nach eigenen Wünschen formatiert werden
können. Wie im Beispiel in der Methode printSimpleDateFormat()
gezeigt wird hierzu dem Konstruktor ein String übergeben, der
mit Hilfe von Buchstaben-Patterns die genaue Formatierung bestimmt.
Alle Patterns sind in der Dokumentation der Klasse SimpleDateFormat
aufgeführt.
Auf dem SimpleDateFormatter-Objekt wird dessen
Methode format()
aufgerufen, dem als Parameter ein
Objekt vom Typ Date
übergeben wird.
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class AktuellesDatum {
static void printGregorianCalendarDate() {
GregorianCalendar now = new GregorianCalendar();
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); // 14.04.12
df = DateFormat.getDateInstance(DateFormat.MEDIUM); // 14.04.2012
df = DateFormat.getDateInstance(DateFormat.LONG); // 14. April 2012
System.out.println(df.format(now.getTime()));
df = DateFormat.getTimeInstance(DateFormat.SHORT); // 21:21
df = DateFormat.getTimeInstance(DateFormat.MEDIUM); // 21:21:12
df = DateFormat.getTimeInstance(DateFormat.LONG); // 21:21:12 MESZ
System.out.println(df.format(now.getTime()));
df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG); // 14.04.12 21:34:07 MESZ
System.out.println(df.format(now.getTime()));
}
static void printSimpleDateFormat() {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy.MM.dd - HH:mm:ss ");
Date currentTime = new Date();
System.out.println(formatter.format(currentTime)); // 2012.04.14 - 21:34:07
}
public static void main(String[] args) {
printGregorianCalendarDate();
printSimpleDateFormat();
}
}
Ab Java 8
v.8.0Ab Java 8 wurde die gesamte
Date-Time-API erheblich umgestaltet. Hierbei wurden Konzepte der JODA-Bibliothek
übernommen. Die Kernklassen sind nun im Package java.time
enthalten, die Klassen zur Formatierung von Datum und Zeit im
Package java.time.format
.
Die folgende Beispielklasse demonstriert die Formatierung und
Ausgabe des aktuellen Datums mit Hilfe der Java 8 API anhand zweier
Methoden.
formatDateTime()
zeigt die Formatierung
eines LocalDateTime
-Objektes, das über den Aufruf
der statischen Methode now()
mit dem aktuellen
Zeitpunkt initialisiert wird. Es handelt sich dabei um ein Objekt
das Datum und Zeit kombiniert in der ISO-8601
-Form
enthält.
Die Klasse DateTimeFormatter
ist
für die Formatierung zuständig. Sie enthält eine
ganze Reihe vordefinierter statischer Formatierer, von denen einige
hier gezeigt werden. Die Methode format()
erledigt die
eigentliche Formatierung. Sie ist in den drei Klassen LocalDateTime,
LocalDate
und LocalTime
deklariert und erwartet
jeweils einen Parameter vom Typ DateTimeFormatter
.
Gesondert
erwähnt werden muss hier die statische Methose ofPattern()
der Klasse DateTimeFormatter
. Sie nimmt einen String
vorgegebener Musterzeichen entgegen, mit der die Formatierung exakt
gesteuert werden kann. Einen Überblick über die
hierfür zur Verfügung stehenden Zeichen findet sich in den
API Docs der Klasse DateTimeFormatter
.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.LocalDate;
public class AktuellesDatumJava8 {
static void formatDateTime() {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter df;
df = DateTimeFormatter.BASIC_ISO_DATE; // 20160131
df = DateTimeFormatter.ISO_LOCAL_DATE; // 2016-18-31
df = DateTimeFormatter.ISO_DATE_TIME; // 2016-01-31T20:07:07.095
System.out.println(now.format(df));
df = DateTimeFormatter.ofPattern("dd.MM.yyyy kk:mm"); // 31.01.2016 20:07
System.out.println(now.format(df));
}
static void formatDate() {
LocalDate date = LocalDate.now();
DateTimeFormatter df;
System.out.println(date); // 2016-01-31
df = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); // Sonntag, 31. Januar 2016
df = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG); // 31. Januar 2016
df = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); // 31.01.2016
df = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); // 31.01.16
System.out.println(date.format(df));
}
public static void main(String[] args) {
formatDateTime();
formatDate();
}
}
In der Methode formatDate()
wird ein Objekt vom Typ LocalDate
erzeugt, das ein Datum ohne Zeitangaben enthält. Seine
Formatierung erfolgt auf ähnliche Weise wie bei LocalDateTime
.
Im Beispiel werden einige Formatierungen mit Hilfe der Konstanten
der Klasse FormatStyle
demonstriert. Auch hier erfolgt
die eigentliche Formatierung durch Aufruf der Methode format()
.