Archives Wild Code School
Java Avancé

Les dates

Quête 12 sur 15

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 Date avec SimpleDateFormat
  • 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 :

java
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 :

java
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 :

java
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

↗
Parsing and Formatting Dates in Java
tutorials.jenkov.com

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 :

java
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 :

java
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 :

java
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 :

java
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

↗
Class Calendar
docs.oracle.com

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 !

  1. Une fois le projet récupéré en local, ouvre le fichier TestDate.java
  2. 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
  3. 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

  1. 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 :

bash
$ 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é.