Java Date-Klasse

In Java,DateDie Klasse befindet sich imjava.utilPaket, und sie repräsentiert einen bestimmten Zeitpunkt, genau auf die Millisekunde.

Die Date-Klasse wird hauptsächlich verwendet, um Datums- und Zeitinformationen darzustellen, und ist eine der grundlegenden Klassen für den Umgang mit Datum und Uhrzeit in Java.

Es sollte beachtet werden, dass nach Java 8 eine neue Datums-/Zeit-API eingeführt wurde (java.timePaket). Sie istDateleistungsfähiger und einfacher zu verwenden als die Klasse. In vielen Legacy-Codebasen werden Sie jedoch weiterhinDateVerwendung der Klasse sehen.


Grundlegende Verwendung der Date-Klasse

Erstellen eines Date-Objekts

Die Date-Klasse verfügt über mehrere Konstruktoren; die beiden am häufigsten verwendeten Möglichkeiten sind:

Beispiel

// Ein Date-Objekt erstellen, das die aktuelle Zeit darstellt
Date currentDate = new Date();

// Erstellt ein Date-Objekt für eine angegebene Zeit (Millisekunden seit 1. Januar 1970 00:00:00 GMT)
Date specificDate = new Date(1640995200000L); // 1. Januar 2022 00:00:00 GMT

Häufig verwendete Methoden

Die Date-Klasse bietet mehrere häufig verwendete Methoden:

Beispiel

Date date = new Date();

// Ermittelt die Anzahl der Millisekunden seit 1. Januar 1970 00:00:00 GMT
long timeInMillis = date.getTime();

// Legt die Zeit fest (Millisekunden seit 1. Januar 1970 00:00:00 GMT)
date.setTime(1640995200000L);

// Vergleicht zwei Datumsangaben
Date anotherDate = new Date();
int result = date.compareTo(anotherDate); // Gibt -1 zurück, wenn davor, 0, wenn gleich, 1, wenn danach

// Prüfen, ob das Datum nach dem angegebenen Datum liegt
boolean isAfter = date.after(anotherDate);

// Prüfen, ob das Datum vor dem angegebenen Datum liegt
boolean isBefore = date.before(anotherDate);

Formatieren der Date-Klasse

Die Date-Klasse selbst bietet keine Formatierungsfunktionalität, aber wir können dieSimpleDateFormatKlasse zum Formatieren und Parsen von Datumsangaben.

Beispiel für die Datumsformatierung

Beispiel

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatExample {
    public static void main(String[] args) {
        Date date = new Date();
       
        // Formatter-Objekt erstellen
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat(yyyy-MM-dd E HH:mm:ss);
       
        // Datum formatieren
        String formattedDate1 = sdf1.format(date);
        String formattedDate2 = sdf2.format(date);
       
        System.out.println("Format 1: " + formattedDate1);
        System.out.println("Format 2: " + formattedDate2);
    }
}

Das Ausgabeergebnis ist:

格式1: 2025-05-01 11:33:43
格式2: 2025年05月01日 周四 11时33分43秒

Gängige Formatmuster

Buchstabe Bedeutung Beispiel
y Jahr yyyy → 2023
M month MM → 01, MMM → Jan
d day dd → 05
H Stunde (24-Stunden-Format) HH → 13
h Stunde (12-Stunden-Format) hh → 01
m Minute mm → 30
s second ss → 45
S Millisekunde SSS → 789
E Wochentag E → Montag
a AM/PM-Markierung a → PM

Umfassendes Beispiel

Das Folgende ist ein einfaches Beispiel für Date:

Beispiel

import java.util.Date;
import java.text.SimpleDateFormat;

public class DateDemo {
    public static void main(String[] args) {
        // 1. Erstellen Sie ein Date-Objekt, das die aktuelle Zeit repräsentiert
        Date now = new Date();
        System.out.println("Aktuelle Zeit: " + now);
       
        // 2. Ein Date-Objekt für eine bestimmte Zeit erstellen (veraltet, nicht empfohlen)
        @SuppressWarnings("deprecation")
        Date oldDate = new Date(123, 4, 15); // 15. Mai 2023 (Monat 0-11)
        System.out.println("Bestimmtes Datum: " + oldDate);
       
        // 3. Ein Date-Objekt mit einem Zeitstempel erstellen (empfohlen)
        Date dateFromTimestamp = new Date(1684131330000L); // 2023-05-15 10:15:30
        System.out.println("Erstellt aus Zeitstempel: " + dateFromTimestamp);
       
        // 4. Die Datumsausgabe formatieren
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);
        System.out.println("Formatiertes Datum: " + formattedDate);
       
        // 5. Einen String in ein Date parsen
        try {
            Date parsedDate = sdf.parse("2023-05-15 10:30:00");
            System.out.println("Geparstes Datum: " + parsedDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
       
        // 6. Den Zeitstempel abrufen
        long timestamp = now.getTime();
        System.out.println("Zeitstempel: " + timestamp);
       
        // 7. Datumsangaben vergleichen
        System.out.println("Ist now nach dateFromTimestamp: " + now.after(dateFromTimestamp));
        System.out.println("Ist now vor dateFromTimestamp: " + now.before(dateFromTimestamp));
    }
}

Das Ausgabeergebnis ist:

当前时间: Thu May 01 11:33:05 CST 2025
特定日期: Mon May 15 00:00:00 CST 2023
从时间戳创建: Mon May 15 14:15:30 CST 2023
格式化日期: 2025-05-01 11:33:05
解析后的日期: Mon May 15 10:30:00 CST 2023
时间戳: 1746070385401
now 是否在 dateFromTimestamp 之后: true
now 是否在 dateFromTimestamp 之前: false

Einschränkungen der Date-Klasse

Obwohl die Date-Klasse in vielen Fällen noch verwendbar ist, hat sie einige offensichtliche Einschränkungen:

  1. Nicht threadsicher: Date-Objekte sind veränderlich, was in Multithread-Umgebungen zu Problemen führen kann.
  2. Schlechtes Design: Monate beginnen bei 0 (0 bedeutet Januar), und Jahre werden ab 1900 gezählt, was leicht zu Verwechslungen führt.
  3. Komplexe Zeitzonenbehandlung: Die Date-Klasse selbst enthält keine Zeitzoneninformationen; die Zeitzonenbehandlung erfordert zusätzliche Klassen.
  4. Begrenzte Funktionalität: Es fehlen viele gängige Funktionen zur Datumsmanipulation, wie das Addieren oder Subtrahieren von Tagen, Wochen usw.

Alternative: Java-8-Date-Time-API

Java 8 führte eine neue Date-Time-API (java.timePaket) ein, die viele Probleme der Date-Klasse löst:

Beispiel

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class NewDateTimeExample {
    public static void main(String[] args) {
        // Aktuelles Datum und aktuelle Uhrzeit abrufen
        LocalDateTime now = LocalDateTime.now();
       
        // Formatieren
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = now.format(formatter);
       
        System.out.println("Aktuelle Zeit: " + formattedDateTime);
    }
}

Die neue Datum-Uhrzeit-API bietet mehr Funktionen, wie zum Beispiel:

  • LocalDate- Enthält nur Datum
  • LocalTime- Enthält nur Uhrzeit
  • LocalDateTime- Enthält Datum und Uhrzeit
  • ZonedDateTime- Enthält Datum, Uhrzeit und Zeitzone
  • Umfangreiche Methoden zur Datumsmanipulation

Zusammenfassung

  1. DateDie Klasse ist eine grundlegende Klasse in Java zur Darstellung von Datum und Uhrzeit, weist jedoch einige Einschränkungen auf.
  2. VerwendungSimpleDateFormatkann Datumszeichenfolgen formatieren und parsen.
  3. In Java 8 und höher wird empfohlen, die neuejava.timeAPI anstelle vonDatedie Klasse hinzufügen.
  4. Bei der Wartung von Legacy-Code ist das VerständnisDateder Klasse weiterhin wichtig.

Wenn Sie ein neues Projekt entwickeln, wird empfohlen, der neuen Java-8-Datums-/Zeit-API Priorität einzuräumen, da sie intuitiver, leistungsfähiger und threadsicher ist.

Die folgenden sind die gebräuchlichen Methoden der Klasse java.util.Date:

Konstruktoren

Methode Beschreibung Hinweise
Date() Erstellt ein Date-Objekt, das die aktuelle Zeit repräsentiert Veraltet, es wird empfohlen,new Date()oderCalendar.getInstance()
Date(long date) Erstellt ein Date-Objekt basierend auf der angegebenen Anzahl von Millisekunden Die Anzahl der Millisekunden wird ab dem 1. Januar 1970 00:00:00 GMT berechnet

Häufig verwendete Methoden

Methode Beschreibung Hinweise
boolean after(Date when) Prüft, ob dieses Datum nach dem angegebenen Datum liegt
boolean before(Date when) Prüft, ob dieses Datum vor dem angegebenen Datum liegt
Object clone() Gibt eine Kopie dieses Objekts zurück
int compareTo(Date anotherDate) Vergleicht die Reihenfolge zweier Datumsangaben
boolean equals(Object obj) Vergleicht zwei Datumsangaben auf Gleichheit
long getTime() Gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 zurück
void setTime(long time) Legt dieses Date-Objekt mithilfe eines Millisekundenwerts fest
String toString() Konvertiert das Date-Objekt in eine Zeichenfolgendarstellung Formatbeispiel: "Tue Jun 22 13:07:00 CST 2021"

Veraltete Methoden (nicht empfohlen)

Methode Beschreibung Ersatz
int getDate() Gibt den Tag des Monats zurück (1-31) Verwenden SieCalendar.get(Calendar.DATE)
int getDay() Den Wochentag abrufen (0-6) Verwenden SieCalendar.get(Calendar.DAY_OF_WEEK)
int getHours() Die Stunde abrufen (0-23) Verwenden SieCalendar.get(Calendar.HOUR_OF_DAY)
int getMinutes() Die Minute abrufen (0-59) Verwenden SieCalendar.get(Calendar.MINUTE)
int getMonth() Den Monat abrufen (0-11) Verwenden SieCalendar.get(Calendar.MONTH)
int getSeconds() Die Sekunden abrufen (0-59) Verwenden SieCalendar.get(Calendar.SECOND)
int getYear() Das Jahr abrufen (beginnend bei 1900) Verwenden SieCalendar.get(Calendar.YEAR)
void setDate(int date) Den Tag des Monats setzen Verwenden SieCalendar.set(Calendar.DATE, date)
void setHours(int hours) Die Stunde setzen Verwenden SieCalendar.set(Calendar.HOUR_OF_DAY, hours)
void setMinutes(int minutes) Die Minute setzen Verwenden SieCalendar.set(Calendar.MINUTE, minutes)
void setMonth(int month) Den Monat setzen Verwenden SieCalendar.set(Calendar.MONTH, month)
void setSeconds(int seconds) Die Sekunden setzen Verwenden SieCalendar.set(Calendar.SECOND, seconds)
void setYear(int year) Das Jahr setzen Verwenden SieCalendar.set(Calendar.YEAR, year)
Weitere Erweiterungen