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.text.SimpleDateFormat;
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

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEEE a hh:mm:ss");
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

try {
    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:

  1. Eine neue Instanz bei jeder Verwendung erstellen (geringere Leistung)
  2. Verwenden SieThreadLocaleine Instanz für jeden Thread speichern
  3. Verwenden Sie Java 8sDateTimeFormatter(empfohlen)

Beispiel

// Lösung mit ThreadLocal
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.LocalDateTime;
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

  1. SimpleDateFormatWird zum Formatieren und Parsen von Datumsangaben verwendet
  2. Geben Sie das Datumsformat über Musterzeichenfolgen an
  3. Nicht threadsicher; Sie müssen seine Verwendung in Multithread-Umgebungen beachten
  4. Für Java 8 und höher wird die Verwendung empfohlenDateTimeFormatter

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
Andere Erweiterungen