Classe Java GregorianCalendar

GregorianCalendar est une classe de calendrier en Java qui représente le calendrier grégorien, héritant de la classe Calendar. Cette classe fournit le système de calendrier standard utilisé par la plupart des pays du monde.

La classe GregorianCalendar se trouve dans le package java.util et est utilisée pour les opérations liées à la date et à l'heure. Elle prend en charge les calculs de date depuis l'an 1 de notre ère jusqu'à l'avenir, et tient compte de règles calendaires complexes telles que les années bissextiles.


Utilisation de base de GregorianCalendar

Création d'une instance de GregorianCalendar

Il existe plusieurs façons de créer une instance de GregorianCalendar :

Exemple

// Créez une instance représentant la date et l'heure actuelles
GregorianCalendar calendar1 = new GregorianCalendar();

// Créez une instance avec l'année, le mois et la date spécifiés
// Remarque : les mois commencent à 0, 0 représente janvier
GregorianCalendar calendar2 = new GregorianCalendar(2023, 10, 15);

// Créez une instance avec l'année, le mois, la date, l'heure et la minute spécifiés
GregorianCalendar calendar3 = new GregorianCalendar(2023, 10, 15, 14, 30);

// Créer une instance avec l'année, le mois, le jour, l'heure, la minute et la seconde spécifiés
GregorianCalendar calendar4 = new GregorianCalendar(2023, 10, 15, 14, 30, 45);

Obtention d'informations sur la date et l'heure

Exemple

GregorianCalendar calendar = new GregorianCalendar();

int year = calendar.get(Calendar.YEAR);       // Obtenir l'année
int month = calendar.get(Calendar.MONTH);    // Obtenir le mois (0-11)
int day = calendar.get(Calendar.DAY_OF_MONTH); // Obtenir la date
int hour = calendar.get(Calendar.HOUR_OF_DAY); // Obtenir l'heure (format 24 heures)
int minute = calendar.get(Calendar.MINUTE);   // Obtenir la minute
int second = calendar.get(Calendar.SECOND);   // Obtenir la seconde

Définition de la date et de l'heure

Exemple

GregorianCalendar calendar = new GregorianCalendar();

// Définir l'année
calendar.set(Calendar.YEAR, 2024);

// Définir le mois (0-11)
calendar.set(Calendar.MONTH, Calendar.JANUARY);

// Définir la date
calendar.set(Calendar.DAY_OF_MONTH, 1);

// Définir simultanément l'année, le mois et le jour
calendar.set(2024, Calendar.JANUARY, 1);

Méthodes courantes de GregorianCalendar

Calcul de dates

Exemple

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

// Ajouter 10 jours
calendar.add(Calendar.DAY_OF_MONTH, 10);

// Soustraire 2 mois
calendar.add(Calendar.MONTH, -2);

Comparaison de dates

Exemple

GregorianCalendar cal1 = new GregorianCalendar(2023, Calendar.NOVEMBER, 15);
GregorianCalendar cal2 = new GregorianCalendar(2023, Calendar.DECEMBER, 25);

// Comparer deux dates
int result = cal1.compareTo(cal2);  // Renvoie un nombre négatif si cal1 est avant cal2, un nombre positif s'il est après, et 0 s'ils sont égaux

// Vérifier si c'est avant une certaine date
boolean isBefore = cal1.before(cal2);

// Vérifier si c'est après une certaine date
boolean isAfter = cal1.after(cal2);

Vérification de l'année bissextile

Exemple

// Vérifier si l'année spécifiée est bissextile
boolean isLeapYear = new GregorianCalendar().isLeapYear(2024);

Conversion en objet Date

Exemple

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

Définition à partir d'un objet Date

Exemple

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

Sortie du formatage de date

GregorianCalendar lui-même ne fournit pas de méthodes de formatage, mais il peut être utilisé conjointement avec SimpleDateFormat :

Exemple

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);  // Sortie : 2023-11-15 14:30:00

Notes

Les mois commencent à 0

Dans GregorianCalendar, les mois commencent à 0, où 0 représente janvier et 11 représente décembre. Pour une meilleure lisibilité du code, il est recommandé d'utiliser les constantes définies dans la classe Calendar :

Exemple

// Non recommandé
new GregorianCalendar(2023, 10, 15);

// Recommandé
new GregorianCalendar(2023, Calendar.NOVEMBER, 15);

Sécurité des threads

GregorianCalendar n'est pas thread-safe. S'il doit être utilisé dans un environnement multithread, une synchronisation doit être effectuée ou des instances distinctes doivent être créées pour chaque thread.

Alternatives

À partir de Java 8, il est recommandé d'utiliser la nouvelle API de date et d'heure (les classes du package java.time), telles que LocalDate, LocalDateTime, etc. Elles ont une conception plus raisonnable et sont plus pratiques à utiliser.


Exemple complet

Exemple

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.text.SimpleDateFormat;

public class GregorianCalendarExample {
    public static void main(String[] args) {
        // Créer une instance de la date actuelle
        GregorianCalendar calendar = new GregorianCalendar();
       
        // Afficher la date et l'heure actuelles
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Heure actuelle : " + sdf.format(calendar.getTime()));
       
        // Vérifier si cette année est une année bissextile
        int year = calendar.get(Calendar.YEAR);
        boolean isLeap = calendar.isLeapYear(year);
        System.out.println(year + "année " + (isLeap ? " est" : " n'est pas") + "une année bissextile");
       
        // Ajouter 30 jours
        calendar.add(Calendar.DAY_OF_MONTH, 30);
        System.out.println("30 jours plus tard : " + sdf.format(calendar.getTime()));
       
        // Créer une instance d'une date spécifique
        GregorianCalendar birthday = new GregorianCalendar(1990, Calendar.JULY, 15);
        System.out.println("Anniversaire : " + sdf.format(birthday.getTime()));
    }
}

Le résultat de sortie est:

当前时间: 2025-05-01 11:37:43
2025年不是闰年
30天后: 2025-05-31 11:37:43
生日: 1990-07-15 00:00:00

Résumé des méthodes

GregorianCalendar est une classe d'implémentation concrète de Calendar. Voici ses méthodes couramment utilisées :

Constructeurs

Méthode Description
GregorianCalendar() Crée un objet en utilisant le fuseau horaire et les paramètres régionaux par défaut
GregorianCalendar(int year, int month, int dayOfMonth) Crée un objet avec l'année, le mois et le jour spécifiés
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) Crée un objet avec l'année, le mois, le jour, l'heure et la minute spécifiés
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) Crée un objet avec l'année, le mois, le jour, l'heure, la minute et la seconde spécifiés
GregorianCalendar(Locale locale) Crée un objet en utilisant le fuseau horaire par défaut et les paramètres régionaux spécifiés
GregorianCalendar(TimeZone zone) Crée un objet en utilisant le fuseau horaire spécifié et les paramètres régionaux par défaut
GregorianCalendar(TimeZone zone, Locale locale) Crée un objet en utilisant le fuseau horaire et les paramètres régionaux spécifiés

Méthodes spécifiques

Méthode Description
boolean isLeapYear(int year) Détermine si l'année spécifiée est une année bissextile
void setGregorianChange(Date date) Définit la date de conversion du calendrier julien au calendrier grégorien
Date getGregorianChange() Obtient la date de conversion du calendrier julien au calendrier grégorien

Hérité de Calendar

Méthode Description
int get(int field) Obtient la valeur du champ
void set(int field, int value) Définit la valeur du champ spécifié
void add(int field, int amount) Ajoute ou soustrait la durée spécifiée
void roll(int field, int amount) Ajoute ou soustrait sans modifier les champs plus grands
boolean after(Object when) Détermine s'il s'agit de l'heure spécifiée
boolean before(Object when) Détermine s'il est antérieur à l'heure spécifiée
long getTimeInMillis() Renvoie la valeur de temps (millisecondes)
void setTimeInMillis(long millis) Définit le Calendar avec une valeur en millisecondes
Date getTime() Renvoie l'objet Date correspondant
void setTime(Date date) Définit l'heure à l'aide d'un objet Date

Constantes de champ (héritées de Calendar)

Champ Description
YEAR Champ année
MONTH Champ mois (0-11)
DATE / DAY_OF_MONTH Jour du mois
DAY_OF_WEEK Jour de la semaine (1-7, 1=dimanche)
HOUR Heure au format 12 heures
HOUR_OF_DAY Heure au format 24 heures
MINUTE Minute
SECOND second
MILLISECOND Milliseconde
AM_PM AM ou PM
Autres extensions