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
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
// 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.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.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:
- Nicht threadsicher: Date-Objekte sind veränderlich, was in Multithread-Umgebungen zu Problemen führen kann.
- Schlechtes Design: Monate beginnen bei 0 (0 bedeutet Januar), und Jahre werden ab 1900 gezählt, was leicht zu Verwechslungen führt.
- Komplexe Zeitzonenbehandlung: Die Date-Klasse selbst enthält keine Zeitzoneninformationen; die Zeitzonenbehandlung erfordert zusätzliche Klassen.
- 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.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 DatumLocalTime- Enthält nur UhrzeitLocalDateTime- Enthält Datum und UhrzeitZonedDateTime- Enthält Datum, Uhrzeit und Zeitzone- Umfangreiche Methoden zur Datumsmanipulation
Zusammenfassung
DateDie Klasse ist eine grundlegende Klasse in Java zur Darstellung von Datum und Uhrzeit, weist jedoch einige Einschränkungen auf.- Verwendung
SimpleDateFormatkann Datumszeichenfolgen formatieren und parsen. - In Java 8 und höher wird empfohlen, die neue
java.timeAPI anstelle vonDatedie Klasse hinzufügen. - Bei der Wartung von Legacy-Code ist das Verständnis
Dateder 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) |