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
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
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
// 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
// Ajouter 10 jours
calendar.add(Calendar.DAY_OF_MONTH, 10);
// Soustraire 2 mois
calendar.add(Calendar.MONTH, -2);
Comparaison de dates
Exemple
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
boolean isLeapYear = new GregorianCalendar().isLeapYear(2024);
Conversion en objet Date
Exemple
Date date = calendar.getTime();
Définition à partir d'un objet Date
Exemple
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
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
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.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 |