1. Dateclasse et heure Unix

Depuis le tout début de Java, le langage a eu une classe spéciale pour travailler avec les heures et les dates — Date. Au fil du temps, plusieurs autres classes pour travailler avec les dates sont apparues, mais les programmeurs continuent d'utiliser la Dateclasse même aujourd'hui.

C'est parce que c'est très simple et pratique. Et en tant que programmeur, vous le rencontrerez certainement dans tout projet réel. Que vous l'utilisiez ou non, c'est votre choix, mais vous devez le savoir. Alors donnez-lui quelques minutes de votre temps précieux.

Qu'est-ce qui rend la Dateclasse si bonne? Sa simplicité.

La Dateclasse stocke les informations de date et d'heure sous la forme du nombre de millisecondes qui se sont écoulées depuis le 1er janvier 1970. C'est beaucoup de millisecondes, donc le longtype est utilisé pour les stocker.

Intéressant.

Pourquoi depuis 1970 précisément ? C'est ce qu'on appelle l'heure Unix : c'est ainsi que le système d'exploitation Unix, qui est le grand-père de tous les systèmes d'exploitation modernes, garde l'heure.

Mais vous pouvez très facilement savoir combien de temps s'est écoulé entre deux dates : soustrayez simplement une date de l'autre, et vous obtenez la différence de temps entre les dates à la milliseconde près.

Voici quelques exemples utiles de travail avec la Dateclasse.


2. Obtenir la date actuelle

Pour obtenir l'heure et la date actuelles, créez simplement un Dateobjet. Chaque nouvel objet stocke l'heure à laquelle il a été créé. Ça a l'air très simple :

Date current = new Date();

Après avoir exécuté cette commande, la currentvariable stockera une référence à l' Dateobjet créé, qui stockera en interne l'heure de sa création - le nombre de millisecondes qui se sont écoulées depuis le 1er janvier 1970.

Affichage de la date actuelle à l'écran

Pour afficher la date actuelle, il suffit de : a) créer un nouvel Dateobjet, b) l'imprimer à l'écran en utilisant la System.out.println()méthode .

Exemple:

Code Sortie console
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Voici ce que signifie la sortie de la console :

Texte Interprétation
Jeudi _ Jeudi
21 février 21 février
14:01:34 heures : minutes : secondes
eet Fuseau horaire : heure d'Europe de l'Est
2019 Année

3. Fixer une date précise

Nous avons compris comment obtenir l'heure actuelle, mais comment créer un Dateobjet qui stocke une date ou une heure différente ?

Encore une fois, tout est simple ici. Pour définir une date précise, vous devez écrire un code comme celui-ci :

Date birthday = new Date(year, month, day);

Tout est simple et évident, mais il y a deux nuances à prendre en compte :

  1. L'année doit être comptée à partir de 1900.
  2. Les mois sont numérotés à partir de zéro.
Intéressant.

C'est un autre héritage du système d'exploitation Unix : sur Unix, les programmeurs notaient l'année à l'aide de deux chiffres. Au lieu de 1977, ils ont simplement écrit 77. Donc 77 est la bonne année si on compte à partir de 1900.

Par exemple, je suis né le 21 mars 1989. Mars est le troisième mois, donc je dois écrire :

Code Sortie console
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Les mois sont comptés à partir de zéro, mais les jours ne le sont pas. C'est un peu étrange, non ?

Nous pensons que les vrais programmeurs auraient dû prévaloir et numéroter les jours du mois à partir de zéro également. Oh, ces conformistes 🙂

Définir une heure précise

Définir une heure spécifique est également assez simple : pour cela, vous devez écrire une déclaration comme celle-ci :

Date birthday = new Date(year, month, day, hour, minutes, seconds);

Les heures, les minutes et les secondes sont numérotées à partir de zéro : laissez le programmeur en vous pousser un soupir de soulagement.

Exemple:

Code Sortie console
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Nous fixons l'heure 12h15 et la date 4 juin 2005 . C'est un peu difficile à lire pour un non-programmeur, mais cela fonctionne comme il se doit.


4. Travailler avec des éléments d'une date

Vous pouvez faire plus avec un Dateobjet que simplement l'afficher. Il a des méthodes qui vous permettent d'obtenir des éléments individuels de la date stockée en interne :

Méthode Description
int getYear()
Renvoie l'année de la date par rapport à 1900.
int getMonth()
Renvoie le mois de la date (les mois sont numérotés à partir de zéro)
int getDate()
Renvoie le jour du mois
int getDay()
Renvoie le jour de la semaine
int getHours()
Renvoie les heures
int getMinutes()
Renvoie les minutes
int getSeconds()
Renvoie les secondes

Exemple:

Code Sortie console Note
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005
juin
jour du mois
samedi

Soit dit en passant, un Dateobjet vous permet non seulement d'obtenir des éléments individuels d'une date, mais également de les modifier :

Méthode Description
void setYear(int year) Change l'année de la date. L'année est indiquée par rapport à 1900.
void setMonth(int month) Change le mois de la date (les mois sont numérotés à partir de zéro)
void setDate(int date) Change le jour du mois
void setHours(int hours) Changements d'heures
void setMinutes(int minutes) Modifie les minutes
void setSeconds(int seconds) Change les secondes

5. Millisecondes

Comme nous l'avons dit précédemment, l' Dateobjet stocke le nombre de millisecondes qui se sont écoulées depuis le 1er janvier 1970.

Si nous avons besoin de ce numéro, nous pouvons l'obtenir à partir de l' Dateobjet :

long time = date.getTime();

La getTime()méthode renvoie le nombre de millisecondes stockées dans l' Dateobjet.

Non seulement vous pouvez obtenir le nombre de millisecondes, mais vous pouvez également modifier ce nombre dans un objet existant :

Date date = new Date();
date.setTime(1117876500000L);

Au fait, vous pouvez écrire ceci de manière encore plus concise en transmettant l'heure à l' Dateobjet dès sa création :

Date date = new Date(1117876500000L);

6. Comparer les dates

Si vous souhaitez comparer deux dates et savoir laquelle est arrivée en premier, vous avez trois options

La première consiste à comparer simplement le nombre de millisecondes qu'ils stockent chacun :

if (date1.getTime() < date2.getTime())

La deuxième façon est d'utiliser la before()méthode d'un Dateobjet :

if (date1.before(date2))

Il se lit comme suit : si date1vient avant date2, alors...

La troisième façon est d'utiliser la after()méthode d'un Dateobjet :

if (date2.after(date1))

Il se lit comme suit : si date2est après date1, alors...


7. DateFormatclasse

Rappelez-vous, lorsque nous avons affiché la date à l'écran, nous avons vu quelque chose comme ceci : Thu Feb 21 14:01:34 EET 2019. Tout semble correct, mais le format est plus la façon dont une date serait affichée pour les programmeurs que pour les humains normaux. Nous voulons afficher la date plus clairement pour les utilisateurs. Quelque chose comme Tuesday, February 21.

Et sans l'année. Ou avec un an, si nécessaire. En général, nous souhaitons pouvoir afficher la date de différentes manières.

Il existe une classe spéciale pour cela : SimpleDateFormat.

Exemple:

Code
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Sortie console
Jun-04-2005

Regardez ce que le programme affiche : Jun-04-2005. Ce n'est plus du tout ce que c'était.

La différence est que nous n'affichons pas l' Dateobjet lui-même, mais une chaîne spéciale obtenue en appelant la format()méthode sur un SimpleDateFormatobjet. Mais ce n'est même pas le point principal ici.

Lorsque l' SimpleDateFormatobjet a été créé, nous avons passé la chaîne "MMM-dd-YYYY"en paramètre. C'est cette chaîne qui transmet le format de date que nous avons finalement vu dans la sortie de la console.

  • MMM indique d'afficher le nom du mois, abrégé à l'aide de trois lettres
  • dd indique d'afficher le jour du mois
  • YYYY indique d'afficher l'année en utilisant quatre chiffres

Si nous voulons sortir le mois sous forme de nombres, alors au lieu de MMM, nous devons écrire MM, ce qui donne le modèle "MM-dd-YYYY". La sortie d'écran sera06-04-2005

Nous discuterons de cette classe plus en détail plus tard.


8. Date.parseméthode

La Dateclasse peut faire autre chose d'intéressant et d'utile — elle peut obtenir une date à partir d'une chaîne. Ou, comme le disent les programmeurs, il peut analyser une chaîne.

Il a la parse()méthode spéciale pour cela. L'analyse ressemble à ceci :

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

Soit dit en passant, ce code peut être écrit de manière plus compacte :

Date date = new Date("Jul 06 12:15:00 2019");

Nous examinerons l' analyse des chaînes plus en détail dans d'autres leçons.