Java Calendar: La classe Calendar est utilisée pour faire de l’arithmétique de date et d’heure. Chaque fois que vous avez quelque chose de légèrement plus avancé que la simple représentation d’une date et d’une heure, c’est la classe à utiliser.
La classejava.util.Calendar
est abstraite, ce qui signifie que vous ne pouvez pas l’instancier. La raison en est qu’il existe plus d’un calendrier dans le monde. Par exemple, le calendrier arabe utilise une année différente comme année 0 que le calendrier grégorien utilisé par la plupart des pays occidentaux.
Instanciation d’un calendrier grégorien
Java n’est livré qu’avec une implémentation de calendrier grégorien, la classejava.util.GregorianCalendar
. Voici comment instancier un GregorianCalendar
:
Calendar calendar = new GregorianCalendar();
Un nouveau GregorianCalendar
a la date et l’heure définies sur « maintenant », c’est-à-dire la date et l’heure auxquelles il a été créé.
Accès à l’année, au mois, au jour, etc.
La classe Java Calendar a quelques méthodes que vous pouvez utiliser pour accéder à l’année, au mois, au jour, à l’heure, aux minutes, aux secondes, aux millisecondes et au fuseau horaire d’une date donnée. Voici quelques exemples montrant comment cela se fait :
Calendar calendar = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR);
int mois = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // Jan = 0, pas 1
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);
int heure = calendar.get(Calendar.HOUR); // horloge de 12 heures
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); // horloge 24 heures
int minute = calendar.get(Calendar.MINUTE);
int seconde = calendar.get(Calendar.SECOND);
int milliseconde=calendar.get(Calendar.MILLISECOND);
Il y a quelques autres champs auxquels vous pouvez accéder, comme DAY_OF_WEEK_IN_MONTH
et AM_PM
qui ne sont pas utilisés si souvent. Consultez le JavaDoc officiel pour en savoir plus sur ces champs.
La classeCalendar
a une méthode set()
correspondante afin que vous puissiez également définir ces champs. Voici à quoi cela se ressemble :
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2009);
calendar.set(Calendar.MONTH, 11); // 11 = décembre
calendar.set(Calendar.DAY_OF_MONTH, 24); // réveillon de Noël
Additionner et soustraire à l’année, au mois, au jour, etc.
Vous pouvez également ajouter à ces champs et faire en sorte que l’ instanceCalendar
se mette à jour correctement. Regardez cet exemple :
Calendar calendar = new GregorianCalendar();
//fixe la date au dernier jour de 2022
calendar.set(Calendar.YEAR, 2022);
calendar.set(Calendar.MONTH, 11); // 11 = décembre
calendar.set(Calendar.DAY_OF_MONTH, 31); // réveillon de Nouvel an
// ajouter un jour
calendar.add(Calendar.DAY_OF_MONTH, 1);
// la date est maintenant janvier. 1er 2010
int year = calendar.get(Calendar.YEAR); // maintenant 2023
int mois = calendar.get(Calendar.MONTH); // maintenant 0 (Jan = 0)
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // maintenant 1
La méthode add()
est très pratique lorsque vous effectuez des calculs de date comme l’ajout ou la soustraction d’années, de mois, de jours, d’heures, etc. à partir d’une date donnée.
Pour soustraire des champs, appelez la méthode add()
méthode avec des valeurs négatives, comme ceci :
calendar.add(Calendrier.DAY_OF_MONTH, -1);
Pièges et pièges Java Calendar
Il y a quelques pièges mineurs dans la classe Calendar
dont vous devez être conscient pour éviter des maux de tête inutiles. Je vais couvrir ceux dans les sections suivantes.
Le piège du mois
Le champMONTH
de la classe Calendar
ne va pas de 1 à 12 comme ils le font quand on écrit des dates autrement. Au lieu de cela, les mois vont de 0 à 11, où 0 correspond à janvier et 11 à décembre. Cela peut entraîner quelques erreurs et un débogage ultérieur si vous n’en êtes pas conscient.
Le piège du jour de la semaine
Le jour de la semaine va de 1 à 7, comme on peut s’y attendre, mais le dimanche, et non le lundi, est le premier jour de la semaine. Cela signifie que 1 = dimanche, 2 = lundi, …, 7 = samedi. Cela m’a également causé des désagréments mineurs de temps en temps.
Plus de détails dans le JavaDoc
Si vous devez effectuer des calculs de date et d’heure lourds ou complexes, il est judicieux de lire la documentation de la classe java.util.Calendar
dans les JavaDoc officiels. La documentation de la classe contient plus de détails sur le comportement spécifique de la classe. Par exemple, si vous fixez la date au 34 janvier 2022, quelle sera la date réelle ?