Java GregorianCalendar-Klasse
GregorianCalendar ist eine Kalenderklasse in Java, die den gregorianischen Kalender repräsentiert und von der Klasse Calendar erbt. Diese Klasse bietet das Standardkalendersystem, das von den meisten Ländern der Welt verwendet wird.
Die Klasse GregorianCalendar befindet sich im Paket java.util und wird für Datums- und Zeitoperationen verwendet. Sie unterstützt Datumsberechnungen vom Jahr 1 n. Chr. bis in die Zukunft und berücksichtigt komplexe Kalenderregeln wie Schaltjahre.
Grundlegende Verwendung von GregorianCalendar
Erstellen einer GregorianCalendar-Instanz
Es gibt mehrere Möglichkeiten, eine GregorianCalendar-Instanz zu erstellen:
Beispiel
GregorianCalendar calendar1 = new GregorianCalendar();
// Erstellt eine Instanz mit dem angegebenen Jahr, Monat und Tag
// Hinweis: Monate beginnen bei 0, 0 steht für Januar
GregorianCalendar calendar2 = new GregorianCalendar(2023, 10, 15);
// Erstellt eine Instanz mit dem angegebenen Jahr, Monat, Tag, Stunde und Minute
GregorianCalendar calendar3 = new GregorianCalendar(2023, 10, 15, 14, 30);
// Eine Instanz mit dem angegebenen Jahr, Monat, Datum, Stunde, Minute und Sekunde erstellen
GregorianCalendar calendar4 = new GregorianCalendar(2023, 10, 15, 14, 30, 45);
Abrufen von Datums- und Uhrzeitinformationen
Beispiel
int year = calendar.get(Calendar.YEAR); // Das Jahr abrufen
int month = calendar.get(Calendar.MONTH); // Den Monat abrufen (0-11)
int day = calendar.get(Calendar.DAY_OF_MONTH); // Das Datum abrufen
int hour = calendar.get(Calendar.HOUR_OF_DAY); // Die Stunde abrufen (24-Stunden-Format)
int minute = calendar.get(Calendar.MINUTE); // Die Minute abrufen
int second = calendar.get(Calendar.SECOND); // Die Sekunde abrufen
Festlegen von Datum und Uhrzeit
Beispiel
// Das Jahr festlegen
calendar.set(Calendar.YEAR, 2024);
// Den Monat festlegen (0-11)
calendar.set(Calendar.MONTH, Calendar.JANUARY);
// Das Datum festlegen
calendar.set(Calendar.DAY_OF_MONTH, 1);
// Jahr, Monat und Tag gleichzeitig setzen
calendar.set(2024, Calendar.JANUARY, 1);
Gängige Methoden von GregorianCalendar
Datumsberechnung
Beispiel
// 10 Tage addieren
calendar.add(Calendar.DAY_OF_MONTH, 10);
// 2 Monate subtrahieren
calendar.add(Calendar.MONTH, -2);
Daten vergleichen
Beispiel
GregorianCalendar cal2 = new GregorianCalendar(2023, Calendar.DECEMBER, 25);
// Vergleicht zwei Datumsangaben
int result = cal1.compareTo(cal2); // Gibt eine negative Zahl zurück, wenn cal1 vor cal2 liegt, eine positive Zahl, wenn cal1 nach cal2 liegt, und 0, wenn beide gleich sind
// Prüfen, ob es vor einem bestimmten Datum liegt
boolean isBefore = cal1.before(cal2);
// Prüfen, ob es nach einem bestimmten Datum liegt
boolean isAfter = cal1.after(cal2);
Prüfung auf Schaltjahr
Beispiel
boolean isLeapYear = new GregorianCalendar().isLeapYear(2024);
Umwandlung in Date-Objekt
Beispiel
Date date = calendar.getTime();
Setzen aus Date-Objekt
Beispiel
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
Ausgabe der Datumsformatierung
GregorianCalendar selbst bietet keine Formatierungsmethoden, aber es kann zusammen mit SimpleDateFormat verwendet werden:
Beispiel
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(calendar.getTime());
System.out.println(formattedDate); // Ausgabe: 2023-11-15 14:30:00
Hinweise
Monate beginnen bei 0
In GregorianCalendar beginnen die Monate bei 0, wobei 0 für Januar und 11 für Dezember steht. Für eine bessere Lesbarkeit des Codes wird empfohlen, die in der Klasse Calendar definierten Konstanten zu verwenden:
Beispiel
new GregorianCalendar(2023, 10, 15);
// Empfohlen
new GregorianCalendar(2023, Calendar.NOVEMBER, 15);
Threadsicherheit
GregorianCalendar ist nicht threadsicher. Wenn es in einer Multithread-Umgebung verwendet werden muss, sollte synchronisiert werden oder für jeden Thread separate Instanzen erstellt werden.
Alternativen
In Java 8 und höher wird empfohlen, die neue Datums- und Zeit-API (Klassen im Paket java.time) zu verwenden, wie z. B. LocalDate, LocalDateTime usw. Sie haben ein sinnvolleres Design und sind bequemer zu verwenden.
Vollständiges Beispiel
Beispiel
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class GregorianCalendarExample {
public static void main(String[] args) {
// Eine Instanz des aktuellen Datums erstellen
GregorianCalendar calendar = new GregorianCalendar();
// Das aktuelle Datum und die aktuelle Uhrzeit anzeigen
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Aktuelle Zeit: " + sdf.format(calendar.getTime()));
// Prüfen, ob dieses Jahr ein Schaltjahr ist
int year = calendar.get(Calendar.YEAR);
boolean isLeap = calendar.isLeapYear(year);
System.out.println(year + " Jahr " + (isLeap ? " ist ein" : " ist kein") + " Schaltjahr");
// 30 Tage hinzufügen
calendar.add(Calendar.DAY_OF_MONTH, 30);
System.out.println("30 Tage später: " + sdf.format(calendar.getTime()));
// Eine Instanz eines bestimmten Datums erstellen
GregorianCalendar birthday = new GregorianCalendar(1990, Calendar.JULY, 15);
System.out.println("Geburtstag: " + sdf.format(birthday.getTime()));
}
}
Das Ausgabeergebnis ist:
当前时间: 2025-05-01 11:37:43 2025年不是闰年 30天后: 2025-05-31 11:37:43 生日: 1990-07-15 00:00:00
Methodenübersicht
GregorianCalendar ist eine konkrete Implementierungsklasse von Calendar. Im Folgenden werden seine häufig verwendeten Methoden aufgeführt:
Konstruktoren
| Methode | Beschreibung |
|---|---|
GregorianCalendar() |
Erstellt ein Objekt unter Verwendung der Standardzeitzone und des Standard-Locale |
GregorianCalendar(int year, int month, int dayOfMonth) |
Erstellt ein Objekt mit dem angegebenen Jahr, Monat und Tag |
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) |
Erstellt ein Objekt mit dem angegebenen Jahr, Monat, Tag, Stunde und Minute |
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) |
Erstellt ein Objekt mit dem angegebenen Jahr, Monat, Tag, Stunde, Minute und Sekunde |
GregorianCalendar(Locale locale) |
Erstellt ein Objekt unter Verwendung der Standardzeitzone und des angegebenen Locale |
GregorianCalendar(TimeZone zone) |
Erstellt ein Objekt unter Verwendung der angegebenen Zeitzone und des Standard-Locale |
GregorianCalendar(TimeZone zone, Locale locale) |
Erstellt ein Objekt unter Verwendung der angegebenen Zeitzone und des angegebenen Locale |
Spezifische Methoden
| Methode | Beschreibung |
|---|---|
boolean isLeapYear(int year) |
Bestimmt, ob das angegebene Jahr ein Schaltjahr ist |
void setGregorianChange(Date date) |
Legt das Konvertierungsdatum vom julianischen Kalender zum gregorianischen Kalender fest |
Date getGregorianChange() |
Ruft das Konvertierungsdatum vom julianischen Kalender zum gregorianischen Kalender ab |
Von Calendar geerbte allgemeine Methoden
| Methode | Beschreibung |
|---|---|
int get(int field) |
Ruft den Wert des angegebenen Felds ab |
void set(int field, int value) |
Legt den Wert des angegebenen Felds fest |
void add(int field, int amount) |
Addiert oder subtrahiert die angegebene Zeitmenge |
void roll(int field, int amount) |
Addiert oder subtrahiert Zeit, ohne größere Felder zu ändern |
boolean after(Object when) |
Bestimmt, ob es nach der angegebenen Zeit liegt |
boolean before(Object when) |
Bestimmt, ob es vor der angegebenen Zeit liegt |
long getTimeInMillis() |
Gibt den Zeitwert (Millisekunden) zurück |
void setTimeInMillis(long millis) |
Legt den Calendar mit einem Zeitwert in Millisekunden fest |
Date getTime() |
Gibt das entsprechende Date-Objekt zurück |
void setTime(Date date) |
Legt die Zeit mithilfe eines Date-Objekts fest |
Feldkonstanten (von Calendar geerbt)
| Feld | Beschreibung |
|---|---|
YEAR |
Jahresfeld |
MONTH |
Monatsfeld (0-11) |
DATE / DAY_OF_MONTH |
Tag des Monats |
DAY_OF_WEEK |
Wochentag (1-7, 1=Sonntag) |
HOUR |
Stunde im 12-Stunden-Format |
HOUR_OF_DAY |
Stunde im 24-Stunden-Format |
MINUTE |
Minute |
SECOND |
second |
MILLISECOND |
Millisekunde |
AM_PM |
AM oder PM |