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()
.
Tag, Monat und Jahr ermitteln
Zur Ermittlung der einzelnen Datumsbestandteile
verfügt die Klasse LocalDate
über
Methoden zur Rückgabe der einzelnen Datumskomponenten
-
getDayOfWeek()
-
Liefert ein Objekt vom Typ
DayOfWeek
, dessen String-Repräsentation der englische Name des Wochentages ist. Den numerischen Wert erhält man durchgetValue()
, wobei 1 dem Montag und 7 dem Sonntag entsprechen. -
getDayOfMonth()
- Liefert den Tag im Monat
-
getDayOfYear()
- Liefert den laufenden Tag im Jahr
-
getMonth()
-
Liefert ein Objekt vom Typ
Month
dessen String-Repräsentation der englische Monatsname ist. MitgetMonthValue()
kann direkt vomLocalDate
-Objekt der numerische Monatsbezeichner geholt werden. Die Ausgabe entsprichtMonth.getValue()
. -
getYear()
- Liefert die viestellige Jahreszahl
LocalDate currentDate = LocalDate.parse("2021-01-24"); DayOfWeek tagInWoche = currentDate.getDayOfWeek(); int tagImMonat = currentDate.getDayOfMonth(); int tagImJahr = currentDate.getDayOfYear(); Month monat = currentDate.getMonth(); int jahr = currentDate.getYear(); System.out.println("Aktuelles Datum: " + currentDate); // Aktuelles Datum: 2021-01-24 System.out.println("Tag in Woche: " + tagInWoche); // Tag in Woche: SUNDAY System.out.println("Tag in Woche: " + tagInWoche.getValue()); // Tag in Woche: 7 System.out.println("Tag im Monat: " + tagImMonat); // Tag im Monat: 24 System.out.println("Tag im Jahr: " + tagImJahr); // Tag im Jahr: 24 System.out.println("Monat: " + monat); // Monat: JANUARY System.out.println("Monat: " + monat.getValue()); // Monat: 1 System.out.println("Jahr: " + jahr); // Jahr: 2021
Regionalisierung
Zur Regionalisierung von Monats- und Wochentagsnamen
stellen die Klassen Month
und DayOfWeek
die Methode getDisplayName(TextStyle style,
Locale locale)
bereit. Ihr werden zwei
Argumente übergeben, von denen das erste das
Ausgabeformat und das zweite die Angabe der Region
bestimmt.
System.out.println("Wochentag: " + tagInWoche.getDisplayName(TextStyle.FULL, Locale.GERMANY)); // Wochentag: Sonntag System.out.println("Wochentag: " + tagInWoche.getDisplayName(TextStyle.SHORT, Locale.GERMANY)); // Wochentag: So System.out.println("Wochentag: " + tagInWoche.getDisplayName(TextStyle.NARROW, Locale.GERMANY)); // Wochentag: S System.out.println("Wochentag: " + tagInWoche.getDisplayName(TextStyle.FULL, Locale.KOREAN)); // Wochentag: 일요일 System.out.println("Monat: " + monat.getDisplayName(TextStyle.FULL, Locale.GERMANY)); // Monat: Januar System.out.println("Monat: " + monat.getDisplayName(TextStyle.FULL, Locale.CHINESE)); // Monat: 一月
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.