Einführung
Die Java-Klassen SimpleDateFormat
und DateFormat
werden zur Datumformatierung verwendet. Sie werden hauptsächlich dort eingesetzt, wo die Datum- und Uhrzeitfunktionalität von Java angezeigt oder genutzt werden muss. Beide Klassen sind im Paket com.text
enthalten.
Java DateFormat
DateFormat
wird zur Formatierung eines Datums in einenString
basierend auf der spezifischen Lokalisierung verwendet, die als Eingabe bereitgestellt wird.- Die Lokalisierung wird verwendet, um die Region und Sprache für den Benutzer genauer anzugeben.
- Die Art und Weise, wie ein Datum geschrieben wird, ist in verschiedenen Regionen der Welt unterschiedlich. Zum Beispiel wird „31. Dez 2017“ in Indien als „31-12-2017“ geschrieben, während dasselbe in den Vereinigten Staaten von Amerika als „12-31-2017“ geschrieben wird.
- Die
DateFormat
-Klassen sind nicht synchronisiert, es wird empfohlen, für jeden Thread eine separate Instanz zu erstellen.
A DateFormat
object can be created using the getDateInstance()
and getTimeInstance()
method of the DateFormat
class.
Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);
Hinweis: Der Konstruktor Locale(String, String) ist seit Version 19 veraltet.
Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();
Die Methode getDateInstance
von DateFormat
benötigt zwei Eingabeparameter. Der erste Parameter gibt das zu verwendende DateFormat
an, und der zweite Parameter ist die Locale.
Verwendung von format
Die DateFormat
-Klasse verfügt über eine format
-Methode, die für die Formatierung verantwortlich ist.
Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);
Dieser Code formatiert das Datum in der französischen (fr
) Sprache und der Region Frankreich (FR
):
Output3 janv. 2018
Verwendung von getTimeInstance()
Um eine Instanz von DateFormat
zu erstellen, verwenden wir die Methode getDateInstance()
.
Für die Formatierung einer Zeit benötigen wir eine Zeitinstanz. Wir verwenden die Methode getTimeInstance()
, um eine Zeitinstanz zu erhalten.
Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);
Dieser Code formatiert die Zeit in der französischen (fr
) Sprache und der Region Frankreich (FR
):
Output11:03:01
Java SimpleDateFormat
SimpleDateFormat
ist ähnlich wie DateFormat
. Der einzige wesentliche Unterschied zwischen ihnen ist, dass SimpleDateFormat
für das Formatieren (Konvertierung von Date
in String
) und für das Parsen (String
in Date
-Konvertierung) mit Unterstützung für die Lokalisierung verwendet werden kann, während DateFormat
keine Lokalisierungsunterstützung bietet. DateFormat
ist eine abstrakte Klasse, die grundlegende Unterstützung für die Formatierung und das Parsen von Datum bereitstellt. SimpleDateFormat
ist die konkrete Klasse, die die Klasse DateFormat
erweitert.
SimpleDateFormat
kann mithilfe des Konstruktors SimpleDateFormat
erstellt werden. Der Konstruktor ist ein parametrisierter Konstruktor und benötigt ein String-Muster als Parameter.
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Der String muster
ist das Muster, das zur Formatierung eines Datums verwendet wird, und die Ausgabe wird in diesem Muster als „MM-dd-yyyy
“ generiert.
Muster
Werfen wir einen Blick auf die Mustersyntax, die für das Formatierungsmuster verwendet werden sollte.
Letter for Pattern | Date or Time component | Examples |
---|---|---|
G | Era designator | AD |
y | Year | 2018 (yyyy), 18 (yy) |
M | Month in year | July (MMMM), Jul (MMM), 07 (MM) |
w | Results in week in year | 16 |
W | Results in week in month | 3 |
D | Gives the day count in the year | 266 |
d | Day of the month | 09 (dd), 9(d) |
F | Day of the week in month | 4 |
E | Day name in the week | Tuesday, Tue |
u | Day number of week where 1 represents Monday, 2 represents Tuesday and so on | 2 |
a | AM or PM marker | AM |
H | Hour in the day (0-23) | 12 |
k | Hour in the day (1-24) | 23 |
K | Hour in am/pm for 12 hour format (0-11) | 0 |
h | Hour in am/pm for 12 hour format (1-12) | 12 |
m | Minute in the hour | 59 |
s | Second in the minute | 35 |
S | Millisecond in the minute | 978 |
z | Timezone | Pacific Standard Time; PST; GMT-08:00 |
Z | Timezone offset in hours (RFC pattern) | -0800 |
X | Timezone offset in ISO format | -08; -0800; -08:00 |
Einige Buchstaben sollten in unterschiedlicher Menge für unterschiedliche Ergebnisse verwendet werden, wie zum Beispiel für den Monat:
Type | Pattern | Example Output |
---|---|---|
Full Month | MMMM |
July |
Abbreviated Month | MMM |
Jul |
Numeric Month | MM |
07 |
Beispiele
Werfen wir nun einen Blick auf einige Beispiele für verschiedene Formate von Datum und Uhrzeit.
Pattern | Result |
---|---|
MM/dd/yyyy |
01/02/2018 |
dd-M-yyyy hh:mm:ss |
02-1-2018 06:07:59 |
dd MMMM yyyy |
02 January 2018 |
dd MMMM yyyy zzzz |
02 January 2018 India Standard Time |
E, dd MMM yyyy HH:mm:ss z |
Tue, 02 Jan 2018 18:07:59 IST |
Mit SimpleDateFormat()
Um ein Datum zu analysieren, müssen wir eine Instanz von SimpleDateFormat
mit dem Konstruktor erstellen und dann die Methode format()
verwenden:
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
Dieser Code gibt „MM-dd-yyyy“ aus:
Output01-02-2018
Dieses Muster erzeugt „Monat im Jahr“, „Tag im Monat“ und „Jahr“. Die Art des Zeichens (und die Großschreibung) und die Anzahl der Zeichen tragen zur Zeichenkette bei. Der Monat wird durch zwei Ziffern dargestellt, der Tag durch zwei Ziffern und das Jahr durch vier Ziffern.
Dieser Code zeigte das Datum „2. Januar 2018“ als „01-02-2018
„.
Für die Analyse der Zeit müssen wir das Muster beim Erstellen einer Instanz von SimpleDateFormat
ändern.
String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
Dieser Code gibt „HH:mm:ss.SSSZ“ aus:
Output13:03:15.454+0530
Dieses Muster erzeugt „Stunden“, „Minuten“, „Sekunden“, „Millisekunden“ und „Zeitzonenoffset in Stunden (RFC-Muster)“.
Dieser Code zeigte die Zeit als „13:03:15.454+0530
„.
Mit parse()
Das Parsen ist die Umwandlung eines Strings in eine `java.util.Date`-Instanz. Wir können einen String in eine Datumsinstanz mithilfe der `parse()`-Methode der SimpleDateFormat-Klasse parsen. Um einen String in ein Datum zu parsen, benötigen wir eine Instanz der SimpleDateFormat-Klasse und ein Zeichenfolgenmuster als Eingabe für den Konstruktor der Klasse.
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);
Dies gibt ein Datum (12-01-2018
) ohne eine angegebene Zeit aus:
OutputSat Dec 01 00:00:00 IST 2018
Jetzt schauen wir uns ein Beispiel mit `SimpleDateFormat` an, um die Zeit zu parsen.
String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);
Dies gibt eine Zeit (22:00:03
) ohne ein angegebenes Datum aus:
OutputThu Jan 01 22:00:03 IST 1970
Weil wir kein Datum angegeben haben, betrachtet das Programm das Epochen-Datum als das Datum (d.h. 01-Jan-1970
).
Verwendung von `Locale`
Wir haben mit `Locale` als Teil des `DateFormat` gearbeitet und gesehen, dass Lokalisierungen je nach Region verwendet werden.
String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);
Dieser Code formatiert die aktuelle Zeit in der französischen (fr
) Sprache und der Region Frankreich (FR
):
Outputmardi janvier 2018 14:51:02.354+0530
Der Tag und der Monat werden auf Französisch basierend auf der bereitgestellten `Locale`-Eingabe benannt – `mardi` ist „Dienstag“ und `janvier` ist „Januar“.
Fazit
In diesem Artikel haben Sie über SimpleDateFormat
und DateFormat
in Java gelernt.
Referenz:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format