1. Passer de la Date
classe à la Calendar
classe
Les programmeurs ont adoré la Date
classe pour sa simplicité et sa prise en charge des normes Unix, mais comme vous le savez, chaque rose a ses épines.
Les programmeurs voulaient une Date
classe "intelligente". Et ils ont obtenu ce qu'ils voulaient sous la forme de la Calendar
classe. Il a été conçu comme un moyen non seulement de stocker des dates, mais aussi d'effectuer des opérations difficiles avec des dates.
Le nom complet de la Calendar
classe est java.util.Calendar. N'oubliez pas de l'ajouter à une déclaration d'importation si vous décidez de l'utiliser dans votre code.
Vous pouvez créer un Calendar
objet avec cette commande :
Calendar date = Calendar.getInstance();
getInstance()
La méthode statique de la Calendar
classe crée un Calendar
objet initialisé avec la date courante. Le calendrier que vous souhaitez sera créé en fonction des paramètres de l'ordinateur exécutant le programme.
Ou plus précisément, le calendrier que vous obtenez... C'est parce que les humains sur Terre ne sont pas limités à un seul calendrier. Au lieu de cela, ils en utilisent plusieurs. Et presque chacun d'entre eux est associé à une religion ou à un pays. La Calendar
classe en supporte 3 :
Calendrier | Description |
---|---|
Calendrier Grégorien | Calendrier grégorien chrétien |
BouddhisteCalendrier | Calendrier bouddhiste |
JapaneseImperialCalendrier | Calendrier impérial japonais |
Mais il existe aussi des calendriers chinois et arabes. Fondamentalement, travailler avec le temps n'est pas aussi facile qu'il n'y paraît.
Dans le calendrier chinois, l'année est officiellement 4716 au moment de la rédaction de cette leçon. Et selon le calendrier musulman, l'année est 1398. Bienvenue dans le grand monde, mon ami programmeur.
2. Créer un objet calendrier
Nous utiliserons le calendrier grégorien, car c'est le plus courant au monde. Au moins jusqu'à ce que la Chine achète Oracle et fasse du calendrier chinois le principal.
Vous pouvez créer un objet calendrier avec n'importe quelle date à l'aide d'une instruction comme celle-ci :
Calendar date = new GregorianCalendar(year, month, day);
Oui, il faut écrire GregorianCalendar
à chaque fois. Au lieu de Calendar
, vous pouvez également écrire GregorianCalendar
- cela fonctionnera également. Mais l'écriture Calendar
est juste plus courte.
L'année doit être écrite en entier, par exemple vous ne pouvez pas écrire 19 au lieu de 2019. Les mois sont toujours numérotés à partir de zéro. Mais comme auparavant, les jours du mois ne sont pas numérotés à partir de zéro. Nerds !
Pour définir l'heure ainsi que la date, vous devez passer l'heure comme arguments supplémentaires :
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Vous pouvez même passer en millisecondes si nécessaire. Ils sont le paramètre après le nombre de secondes.
3. Afficher un objet calendrier à l'écran
Si vous imprimez simplement un objet calendrier à l'écran, vous ne serez pas très satisfait du résultat.
Code |
---|
|
Sortie console |
|
La chose à garder à l'esprit ici est qu'un calendrier est un calendrier, pas une date : il a toutes sortes de paramètres qui seront tous affichés à l'écran.
Il serait approprié d'utiliser un SimpleDateFormat
objet pour afficher un calendrier, mais jusqu'à ce que nous l'étudions, vous pouvez utiliser ce hack de la vie.
Date date = calendar.getTime();
Un Calendar
objet peut être facilement converti en Date
objet et vous savez déjà comment afficher un Date
objet. Vous pouvez utiliser un code comme celui-ci pour convertir un Calendar
objet en un Date
:
En utilisant la getTime()
méthode :
Code | Sortie console |
---|---|
|
|
C'est une tout autre affaire, n'est-ce pas ?
4. Travailler avec des éléments d'une date
Pour obtenir un élément précis d'une date (par exemple l'année, le mois, ...), la Calendar
classe dispose de la get()
méthode. C'est une méthode unique, mais elle a des paramètres :
int month = calendar.get(Calendar.MONTH);
Où calendar
est une Calendar
variable, et MONTH
est un champ constant de la Calendar
classe.
Vous passez l'un des Calendar
champs constants de la classe comme argument à la get
méthode et vous obtenez la valeur souhaitée comme résultat.
Exemples
Code | Description |
---|---|
|
ère (avant ou après l'ère commune) année mois jour du mois jour de la semaine heures minutes secondes |
Pour changer un élément d'une date, utilisez la set
méthode :
calendar.set(Calendar.MONTH, value);
Où calendar
est une Calendar
variable, et MONTH
est un champ constant de la Calendar
classe.
Lorsque vous travaillez avec set
la méthode, vous transmettez l'un des Calendar
champs constants de la classe comme premier argument et la nouvelle valeur comme deuxième argument.
Exemples
Code | Description |
---|---|
|
année = 2019 mois = juillet (numéroté à partir de 0) 4e jour heures minutes secondes |
5. Constantes de la Calendar
classe
Les champs constants de la Calendar
classe ne se limitent pas à ceux permettant de nommer les éléments d'une date. Il semble y avoir des champs pour chaque occasion.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Par exemple, il existe des champs constants pour faire référence aux mois :
Et aussi les jours de la semaine :
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Nous ne listerons pas tout. Nous ne voulons simplement pas que vous soyez surpris si vous voyez des constantes comme celle-ci dans le code.
L'utilisation de constantes rend le code plus lisible, c'est pourquoi les programmeurs les utilisent. Et les mois sont numérotés à partir de zéro également pour améliorer la lisibilité. Ou non.
6. Changer la date dans un Calendar
objet
La Calendar
classe a une méthode qui vous permet d'opérer sur une date de manière plus intelligente. Par exemple, vous pouvez ajouter une année, un mois ou plusieurs jours à une date. Ou emportez-les. Cette méthode s'appelle add()
. Travailler avec cela ressemble à ceci:
calendar.add(Calendar.MONTH, value);
Où calendar
est une Calendar
variable, et MONTH
est un champ constant de la Calendar
classe.
Lorsque vous travaillez avec add
la méthode, vous transmettez l'un des Calendar
champs constants de la classe comme premier argument et comme second argument — la nouvelle valeur à ajouter.
C'est une autre méthode intelligente. Voyons à quel point c'est intelligent:
Code |
---|
|
Sortie console |
|
Cette méthode comprend qu'il n'y a que 28 jours en février 2019, donc la date résultante est le 1er mars.
Enlevons maintenant 2 mois ! Que devrions-nous obtenir ? 27 décembre 2018 ! Vérifions maintenant.
Pour effectuer une opération qui aboutit à une date antérieure, vous devez transmettre une valeur négative à la add()
méthode :
Code |
---|
|
Sortie console |
|
Ça marche!
Cette méthode tient compte des différentes longueurs de mois ainsi que des années bissextiles. Bref, une excellente méthode. C'est exactement ce dont ont besoin la plupart des programmeurs qui travaillent avec des dates.
7. Éléments roulants d'une date
Mais parfois, il y a des situations où nous ne voulons pas de ce comportement intelligent, par exemple vous voulez faire quelque chose à une partie de la date sans changer tout le reste.
La Calendar
classe a la méthode spéciale roll()
pour cela. Sa signature est identique à la add()
méthode, mais cette méthode ne modifie qu'un seul élément de la date, laissant le reste inchangé.
Exemple:
Code |
---|
|
Sortie console |
|
Nous avons changé le mois, mais l'année et la date sont restées inchangées.
GO TO FULL VERSION