Java SimpleDateFormat-Klasse
SimpleDateFormatist eine Klasse in Java, die zum Formatieren und Parsen von Datum und Uhrzeit verwendet wird und zumjava.text-Paket. Sie ermöglicht es Ihnen, Datumsobjekte (Date) in Zeichenketten in einem bestimmten Format umzuwandeln oder formatierte Datumszeichenketten wieder in Datumsobjekte zu parsen.
Grundlegende Verwendung
1. Erstellen eines SimpleDateFormat-Objekts
UmSimpleDateFormat, müssen Sie zunächst eine Instanz erstellen und ein Datumsformatmuster angeben:
Beispiel
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Ein SimpleDateFormat-Objekt erstellen und das Format angeben
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Aktuelles Datum und aktuelle Uhrzeit abrufen
Date now = new Date();
// Das Datum als Zeichenkette formatieren
String formattedDate = sdf.format(now);
System.out.println("Aktuelle Zeit: " + formattedDate);
}
}
Die Ausgabe ist:
当前时间: 2025-05-01 11:35:07
2. Häufige Formatmuster-Symbole
Die folgenden sind gängige Formatmuster-Symbole:
| Symbol | Bedeutung | Beispiel |
|---|---|---|
| yyyy | Vierstelliges Jahr | 2023 |
| MM | Zweistelliger Monat | 01-12 |
| dd | Zweistelliger Tag | 01-31 |
| HH | Stunde im 24-Stunden-Format | 00-23 |
| mm | Minute | 00-59 |
| ss | Sekunde | 00-59 |
| E | Wochentag | Mo, Di, usw. |
| a | AM/PM-Markierung | AM oder PM |
Datumsformatierung
wirdDateFormatieren Sie das Objekt als Zeichenfolge:
Beispiel
Date now = new Date();
System.out.println(sdf.format(now));
// Beispielausgabe: 2023-11-15 Mittwoch PM 03:45:22
Datumsparsen
Parsen Sie die formatierte Datumszeichenfolge in einDateObjekt:
Beispiel
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2023-11-15";
Date date = sdf.parse(dateString);
System.out.println(date);
// Ausgabe: Wed Nov 15 00:00:00 CST 2023
} catch (ParseException e) {
e.printStackTrace();
}
Hinweis: Beim Parsen kann eine Ausnahme ausgelöst werdenParseException, daher ist eine Ausnahmebehandlung erforderlich.
Thread-Sicherheitsproblem
SimpleDateFormatEs ist nicht threadsicher. Wenn dieselbeSimpleDateFormatInstanz in einer Multithread-Umgebung gemeinsam genutzt wird, kann dies Probleme verursachen. Lösungen:
- Eine neue Instanz bei jeder Verwendung erstellen (geringere Leistung)
- Verwenden Sie
ThreadLocaleine Instanz für jeden Thread speichern - Verwenden Sie Java 8s
DateTimeFormatter(empfohlen)
Beispiel
private static final ThreadLocal<SimpleDateFormat> dateFormat =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
// Verwendung
String formattedDate = dateFormat.get().format(new Date());
Java-8-Alternative
In Java 8 und späteren Versionen wird empfohlen,java.timeKlassen im Paket:
Beispiel
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Formatter erstellen
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// Aktuelle Zeit abrufen und formatieren
LocalDateTime now = LocalDateTime.now();
String formattedDate = now.format(formatter);
System.out.println("Aktuelle Zeit: " + formattedDate);
// Die Zeichenfolge in eine Datums-/Uhrzeitangabe parsen
LocalDateTime parsedDate = LocalDateTime.parse("2023-11-15 14:30:00", formatter);
System.out.println("Geparste Zeit: " + parsedDate);
}
}
DateTimeFormatterEs ist threadsicher, leistungsfähiger und wird für die Verwendung in neuen Projekten empfohlen.
Zusammenfassung
SimpleDateFormatWird zum Formatieren und Parsen von Datumsangaben verwendet- Geben Sie das Datumsformat über Musterzeichenfolgen an
- Nicht threadsicher; Sie müssen seine Verwendung in Multithread-Umgebungen beachten
- Für Java 8 und höher wird die Verwendung empfohlen
DateTimeFormatter
Durch die BeherrschungSimpleDateFormat, können Sie die Konvertierungsanforderungen verschiedener Datums- und Zeitformate in Java-Programmen flexibel bewältigen.
Die folgenden sind gängige Methoden der Klasse java.text.SimpleDateFormat:
Konstruktoren
| Methode | Beschreibung |
|---|---|
SimpleDateFormat() |
Konstruiert ein Objekt unter Verwendung des Standardmusters und der Datumsformat-Symbole des Standard-Locale |
SimpleDateFormat(String pattern) |
Konstruiert ein Objekt unter Verwendung des angegebenen Musters und der Datumsformat-Symbole des Standard-Locale |
SimpleDateFormat(String pattern, Locale locale) |
Erstellt ein Objekt unter Verwendung des angegebenen Musters und der Datumsformatsymbole des angegebenen Gebietsschemas |
Gängige Formatmustersymbole
| Symbol | Bedeutung | Beispiel |
|---|---|---|
y |
Jahr | yyyy → 2023 |
M |
month | MM → 07, MMM → Jul, MMMM → Juli |
d |
Tag des Monats | dd → 15 |
H |
Stunde (0-23) | HH → 14 |
h |
Stunde (1-12) | hh → 02 |
m |
Minute | mm → 30 |
s |
second | ss → 45 |
S |
Millisekunde | SSS → 789 |
E |
Wochentag | EEE → Mo, EEEE → Montag |
a |
AM/PM-Markierung | a → PM |
z |
Zeitzone | z → CST, zzzz → Chinesische Normalzeit |
Kernmethoden
| Methode | Beschreibung |
|---|---|
String format(Date date) |
Formatiert ein Date in eine Datums-/Zeitzeichenfolge |
Date parse(String source) |
Parst Text aus einer Zeichenfolge, um ein Date-Objekt zu erzeugen |
void applyPattern(String pattern) |
Setzt ein neues Datum und eine neue Uhrzeit |
String toPattern() |
Gibt die Zeichenfolge des aktuellen Datums- und Zeitmusters zurück |
void setTimeZone(TimeZone zone) |
Legt die Zeitzone fest |
TimeZone getTimeZone() |
Ruft die Zeitzone ab |
void setLenient(boolean lenient) |
Legt fest, ob das Parsen nachsichtig ist (Standard: true) |
boolean isLenient() |
Ermittelt, ob das Parsen nachsichtig ist |