Calendar

 

La classe Calendar est une classe abstraite permettant de représenter et de manipuler un temps précis. Temps qui sera à la base en ms (de type long).

Pour avoir une instance de la classe Calendar, il faut utiliser Calendar.getInstance();

L'instance sera automatiquement initialisée à un nombre représentant le nombre de ms qui se sont écoulées depuis le 01 janvier 1970 à 00:00:00.000 GMT dans un calendrier Gregorien (ou si vous préférez: l'offset depuis le 01/01/1970 à 0:00:00.000 GMT).

 

Travailler en ms

Il sera évidement possible de modifier ce nombre, en utilisant la méthode setTimeInMillis (long ms);

Mais aussi de récupérer ce nombre en utilisant la méthode getTimeInMillis();

Image non trouvée !Rappel, 1 seconde = 1000 ms (millisecondes)

 

Travailler en jour, mois, années, heure, ...

Image non trouvée !Avant de commencer, sachez que pour vous aider à mieux vous planter dans vos programmes, ceux qui ont développé cette classe n'ont rien trouvé de mieux que de définir les mois dans l'intervalle [0, 11] et non [1, 12] que le commun des mortels utilise...

Manipuler des ms n'est pas forcement des plus faciles, surtout si vous voulez travailler à une date précise (il faut prendre en les années bixestiles, ...)

Heureusement, il sera aussi possible d'initialiser un calendrier à partir d'une date et une heure de manière plus classique !

void set(int year, int month, int date)

void set(int year, int month, int date, int hourOfDay, int minute)

void set(int year, int month, int date, int hourOfDay, int minute, int second)

Image non trouvée ! Ces méthodes n'affectent que les champs indiqués. Les autres ne seront pas modifiés ou initialisés. Donc en appelant deux fois une des méthodes set et en affectant toujours les mêmes valeurs, la valeur en ms ne sera elle jamais la même à 100%. Déjà pas pour les chiffres représentant la valeur inférieures à la seconde (donc les chiffres des centaines/dizaines et unités) puisqu'ils ne sont jamais positionnés !

Il est possible de manipuler/lire individuellement chacun des champs représentant une date du calendrier (heure/minute/seconde comprises).

Il suffit d'utiliser la méthode set(int field, int value) pour positionner un champ particulier de votre date.

field représentant le champ à modifier.

value étant la nouvelle valeur. (avec pour rappel pour les mois, une valeur variant entre 0 et 11 !!!)

Image non trouvée !Aussi étrange que cela puisse être, il n'existe pas de getter ou de setter pour modifier les années, mois, jours, ...

Field Désignation
MILLISECOND Pour les millisecondes
SECOND Seconde dans une minute
MINUTE Minutes dans une heure
HOUR Heure sur 12 heures
HOUR_OF_DAY Heure sur 24 heures
AM_PM Pour indiquer s'il s'agit du matin ou de l'après midi pour une heure donnée sur 12 heures. Dans ce cas, la valeur à passer sera soit AM, soit PM

DAY_OF_MONTH

ou DATE

Pour indiquer un jour dans le mois
DAY_OF_WEEK Pour un jour de la semaine (Utilisez une constante comme MONDAY, ..., SUNDAY)
MONTH Pour préciser un mois (de 0 à 11 !!! ou en utilisant une constante comme JANUARY, ..., DECEMBER voire aussi UNDECIMBER pour le 13ième mois)
YEAR L'année
WEEK_OF_MONTH Semaine dans le mois
WEEK_OF_YEAR Semaine dans l'année

 

Modifier un élément de la date

add(int field, int delta) : permet de modifier un élément de la date et en mettant à jour les autres champs de la date si nécessaire.
roll(int field, int delta) : identique à la méthode add() mais sans affecter les autres éléments de la date.

 

Leniency

Lenient à vrai permet d'indiquer à Calendar que la modification d'un champ entraine un recalcul de la date afin de la normaliser.

Par exemple 30 + 10 provoque une erreur si lenient est à false, ou si lenient à vrai, la date du 9 ou 10 ou autre du mois suivant car recalculé par rapport au nombre de jour du mois (28, 29, 30 ou 31).

Boolean isLenient() (pour connaitre la valeur) ou setLenien (Boolean lenient) pour le positionner.

 

Exemple

 

Autres manipulations

Il existe d'autres méthodes dans cette classe, mais aussi d'autres classes permettant de travailler sur des dates...