Les dates
En temps que développeur, tu seras souvent amené à travailler avec des dates : parfois il te faudra les modifier, ou changer leurs formats (dates européennes, américaines...), ou encore composer avec différents fuseaux horaires.
Java contient plusieurs classes ayant pour but de te faciliter la vie lors de la gestion des dates : cette quête va te permettre d'en découvrir quelques-unes.
Objectifs
- Formater une
DateavecSimpleDateFormat - Utiliser un
Calendar
Date et SimpleDateFormat
Si tu souhaites travailler avec des dates, la classe Date est la première que tu vas rencontrer dans des tutoriels. Cependant, ce n'est pas forcément la plus pratique, ni la plus complète.
Elle reste pratique si tu désires créer une date initialisée à l'instant de l'instanciation :
Date current = new Date(); // Represents the time at which the Date object is allocated
Tu vas avoir besoin d'importer la bibliothèque :
java.util.Date
Si tu souhaites afficher la date sous un format spécifique, tu vas avoir besoin de la classe SimpleDateFormat :
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date current = new Date();
System.out.println(sdf.format(current)); // 22/03/2019 15:15:54
Tu vas avoir besoin d'importer la bibliothèque :
java.text.SimpleDateFormat
L'avantage de SimpleDateFormat, c'est qu'il permet aussi l'opération inverse : si tu as défini un format, tu peux facilement obtenir l'objet Date correspondant :
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
Date birthday = format.parse("01/01/1970");
System.out.println(birthday); // Thu Jan 01 00:00:00 CET 1970
} catch (ParseException e) {
e.printStackTrace();
}
Il est obligatoire d'utiliser try et catch afin de récupérer les erreurs possibles : lors de l'utilisation de la méthode parse, il est possible que la date n'existe pas ou soit mal formatée. Pas d'inquiétude, tu verras l'utilisation des exceptions ultérieurement.
Tu vas avoir besoin d'importer la bibliothèque :
java.text.ParseException
Calendar
La classe Calendar est super utile quand on veut créer une date à partir d'un jour, d'un mois et d'une année, ou faire des opérations dessus (ajouter des jours par exemple).
Par défaut, une instance de Calendar va être créée à la date du jour :
Calendar c = Calendar.getInstance();
Tu vas avoir besoin d'importer la bibliothèque :
java.util.Calendar
Tu peux ensuite récupérer les données de l'objet en utilisant ces méthodes :
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH); // Be careful: January = 0, December = 11
int dayOfMonth = c.get(Calendar.DAY_OF_MONTH);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
Attention : le mois récupéré commence à 0 pour Janvier ! Le jour, lui, commence bien à 1.
Tu trouveras toutes les méthodes de la classe Calendar en ressource.
Il n'est pas obligatoire de créer un objet à la date du jour. Tu peux par exemple utiliser la classe GregorianCalendar pour initialiser une date spécifique :
Calendar c = new GregorianCalendar(2019, 3, 22, 13, 30, 00);
Tu vas avoir besoin d'importer la bibliothèque :
java.util.GregorianCalendar
Si tu veux formater une date contenue dans une instance de Calendar, tu vas aussi utiliser SimpleDateFormat.
Convertis l'objet Calendar en Date grâce à la méthode getTime :
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Calendar c = new GregorianCalendar(2019, 3, 22, 13, 30, 00);
Date d = c.getTime();
System.out.println(sdf.format(d)); // 22/04/2019 13:30:00
Challenge
Formatage de date
Afin de t'exercer à la création de dates, en premier fais un Fork du dépôt suivant puis clone-le en local.
Pense bien à faire un Fork, sinon tu ne pourras rien pousser !
- Une fois le projet récupéré en local, ouvre le fichier
TestDate.java - Tu vas voir qu'il contient déjà du code permettant de récupérer trois données : un jour, un mois et une année
- Utilise ces données et tes connaissances acquises dans la quête pour calculer les informations suivantes :
Une date formatée de la façon suivante "month-day-year", ex : 04-22-2019Le jour de la semaine correspondant à la date, ex : 2
- Concatène les textes "The date is : " et "The day of week is :" devant les données correspondantes, avant de les afficher dans le terminal
Résultat attendu :
$ Please fill a day (1-31) :
$ 22
$ Please fill a month (1-12) :
$ 4
$ Please fill a year :
$ 2019
$ The date is : 04-22-2019
$ The day of week is : 2
Critères de validation
- À la compilation et exécution de
TestDate, un résultat correspondant à celui attendu apparaît. - Le format "month-day-year" est respecté.
- Le numéro du mois est bien celui entré.