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

// Erstellt eine Instanz, die das aktuelle Datum und die aktuelle Uhrzeit repräsentiert
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

GregorianCalendar calendar = new GregorianCalendar();

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

GregorianCalendar calendar = new GregorianCalendar();

// 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

GregorianCalendar calendar = new GregorianCalendar(2023, Calendar.NOVEMBER, 15);

// 10 Tage addieren
calendar.add(Calendar.DAY_OF_MONTH, 10);

// 2 Monate subtrahieren
calendar.add(Calendar.MONTH, -2);

Daten vergleichen

Beispiel

GregorianCalendar cal1 = new GregorianCalendar(2023, Calendar.NOVEMBER, 15);
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

// Prüfen, ob das angegebene Jahr ein Schaltjahr ist
boolean isLeapYear = new GregorianCalendar().isLeapYear(2024);

Umwandlung in Date-Objekt

Beispiel

GregorianCalendar calendar = new GregorianCalendar();
Date date = calendar.getTime();

Setzen aus Date-Objekt

Beispiel

Date date = new Date();
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);

Ausgabe der Datumsformatierung

GregorianCalendar selbst bietet keine Formatierungsmethoden, aber es kann zusammen mit SimpleDateFormat verwendet werden:

Beispiel

GregorianCalendar calendar = new GregorianCalendar(2023, Calendar.NOVEMBER, 15, 14, 30);
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

// Nicht empfohlen
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.GregorianCalendar;
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
Andere Erweiterungen