1. Date
classe 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 Date
classe 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 Date
classe si bonne? Sa simplicité.
La Date
classe 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 long
type est utilisé pour les stocker.
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 Date
classe.
2. Obtenir la date actuelle
Pour obtenir l'heure et la date actuelles, créez simplement un Date
objet. 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 current
variable stockera une référence à l' Date
objet 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 Date
objet, b) l'imprimer à l'écran en utilisant la System.out.println()
méthode .
Exemple:
Code | Sortie console |
---|---|
|
|
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 Date
objet 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 :
- L'année doit être comptée à partir de 1900.
- Les mois sont numérotés à partir de zéro.
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 |
---|---|
|
|
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 |
---|---|
|
|
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 Date
objet 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 |
---|---|
|
Renvoie l'année de la date par rapport à 1900. |
|
Renvoie le mois de la date (les mois sont numérotés à partir de zéro) |
|
Renvoie le jour du mois |
|
Renvoie le jour de la semaine |
|
Renvoie les heures |
|
Renvoie les minutes |
|
Renvoie les secondes |
Exemple:
Code | Sortie console | Note |
---|---|---|
|
|
2005 juin jour du mois samedi |
Soit dit en passant, un Date
objet 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' Date
objet 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' Date
objet :
long time = date.getTime();
La getTime()
méthode renvoie le nombre de millisecondes stockées dans l' Date
objet.
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' Date
objet 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 Date
objet :
if (date1.before(date2))
Il se lit comme suit : si date1
vient avant date2
, alors...
La troisième façon est d'utiliser la after()
méthode d'un Date
objet :
if (date2.after(date1))
Il se lit comme suit : si date2
est après date1
, alors...
7. DateFormat
classe
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 |
---|
|
Sortie console |
|
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' Date
objet lui-même, mais une chaîne spéciale obtenue en appelant la format()
méthode sur un SimpleDateFormat
objet. Mais ce n'est même pas le point principal ici.
Lorsque l' SimpleDateFormat
objet 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.parse
méthode
La Date
classe 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.
GO TO FULL VERSION