Java Calendar

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 GregorianCalendara 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_PMqui ne sont pas utilisés si souvent. Consultez le JavaDoc officiel pour en savoir plus sur ces champs.

La classeCalendara 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’ instanceCalendarse 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.Calendardans 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 ?

Publié dans : Java

Laisser un commentaire