Maîtriser la Date et l'Heure en Java : Constructeurs, Méthodes et Bonnes Pratiques
Java fournit la classe Date disponible dans le package java.util, cette classe encapsule la date et l'heure actuelles.
La classe Date prend en charge deux constructeurs comme indiqué dans le tableau suivant.
| N° | Constructeur et Description |
|---|---|
| 1 | Date() Ce constructeur initialise l'objet avec la date et l'heure actuelles. |
| 2 | Date(long millisec) Ce constructeur accepte un argument égal au nombre de millisecondes écoulées depuis minuit, le 1er janvier 1970. |
Voici les méthodes de la classe Date.
| N° | Méthode et Description |
|---|---|
| 1 | boolean after(Date date) Retourne true si l'objet Date invoquant contient une date postérieure à celle spécifiée par date, sinon false. |
| 2 | boolean before(Date date) Retourne true si l'objet Date invoquant contient une date antérieure à celle spécifiée par date, sinon false. |
| 3 | Object clone() Duplique l'objet Date invoquant. |
| 4 | int compareTo(Date date) Compare la valeur de l'objet invoquant avec celle de date. Retourne 0 si les valeurs sont égales. Retourne une valeur négative si l'objet invoquant est antérieur à date. Retourne une valeur positive si l'objet invoquant est postérieur à date. |
| 5 | int compareTo(Object obj) Fonctionne identiquement à compareTo(Date) si obj est de classe Date. Sinon, lance une ClassCastException. |
| 6 | boolean equals(Object date) Retourne true si l'objet Date invoquant contient la même heure et date que celle spécifiée par date, sinon false. |
| 7 | long getTime() Retourne le nombre de millisecondes écoulées depuis le 1er janvier 1970. |
| 8 | int hashCode() Retourne un code de hachage pour l'objet invoquant. |
| 9 | void setTime(long time) Définit l'heure et la date comme spécifié par time, qui représente un temps écoulé en millisecondes depuis minuit, le 1er janvier 1970. |
| 10 | String toString() Convertit l'objet Date invoquant en chaîne et retourne le résultat. |
Obtenir la date et l'heure actuelles
C'est une méthode très simple pour obtenir la date et l'heure actuelles en Java. Vous pouvez utiliser un simple objet Date avec la méthode toString() pour imprimer la date et l'heure actuelles comme suit :
Exemple
Live Demoimport java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instancie un objet Date
Date date = new Date();
// Affiche l'heure et la date en utilisant toString()
System.out.println(date.toString());
}
}
Cela produira le résultat suivant :
Sortie
on May 04 09:51:52 CDT 2009
Comparaison de dates
Voici trois façons de comparer deux dates :
Vous pouvez utiliser getTime() pour obtenir le nombre de millisecondes écoulées depuis minuit, le 1er janvier 1970, pour les deux objets et ensuite comparer ces deux valeurs.
Vous pouvez utiliser les méthodes before(), after() et equals(). Parce que le 12 du mois vient avant le 18, par exemple, new Date(99, 2, 12).before(new Date(99, 2, 18)) retourne true.
Vous pouvez utiliser la méthode compareTo(), qui est définie par l'interface Comparable et implémentée par Date.
Formatage de date avec SimpleDateFormat
SimpleDateFormat est une classe concrète pour le formatage et l'analyse de dates de manière sensible à la locale. SimpleDateFormat vous permet de commencer en choisissant n'importe quels motifs définis par l'utilisateur pour le formatage date-heure.
Exemple
Live Demoimport java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
Cela produira le résultat suivant :
Sortie
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
Codes de format SimpleDateFormat
Pour spécifier le format d'heure, utilisez une chaîne de motif temporel. Dans ce motif, toutes les lettres ASCII sont réservées comme lettres de motif, définies comme suit :
| Caractère | Description | Exemple |
|---|---|---|
| G | Indicateur d'ère | AD |
| y | Année sur quatre chiffres | 2001 |
| M | Mois dans l'année | July ou 07 |
| d | Jour dans le mois | 10 |
| h | Heure en AM/PM (1~12) | 12 |
| H | Heure dans la journée (0~23) | 22 |
| m | Minute dans l'heure | 30 |
| s | Seconde dans la minute | 55 |
| S | Milliseconde | 234 |
| E | Jour de la semaine | Tuesday |
| D | Jour dans l'année | 360 |
| F | Jour de la semaine dans le mois | 2 (deuxième mercredi de juillet) |
| w | Semaine dans l'année | 40 |
| W | Semaine dans le mois | 1 |
| a | Marqueur AM/PM | PM |
| k | Heure dans la journée (1~24) | 24 |
| K | Heure en AM/PM (0~11) | 10 |
| z | Fuseau horaire | Eastern Standard Time |
| ' | Échappement pour le texte | Délimiteur |
| " | Guillemet simple | ` |
Formatage de date avec printf
Le formatage de date et d'heure peut être fait très facilement en utilisant la méthode printf. Vous utilisez un format à deux lettres, commençant par t et se terminant par l'une des lettres du tableau comme montré dans le code suivant.
Exemple
Live Demoimport java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instancie un objet Date
Date date = new Date();
// Affiche l'heure et la date
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
}
Cela produira le résultat suivant :
Sortie
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Ce serait un peu idiot si vous deviez fournir la date plusieurs fois pour formater chaque partie. Pour cette raison, une chaîne de format peut indiquer l'index de l'argument à formater.
L'index doit suivre immédiatement le % et doit être terminé par un $.
Exemple
Live Demoimport java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instancie un objet Date
Date date = new Date();
// Affiche l'heure et la date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
Cela produira le résultat suivant :
Sortie
Due date: February 09, 2004
Alternativement, vous pouvez utiliser le drapeau <. Il indique que le même argument que dans la spécification de format précédente doit être utilisé à nouveau.
Exemple
Live Demoimport java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instancie un objet Date
Date date = new Date();
// Affiche la date formatée
System.out.printf("%s %tB %
Cela produira le résultat suivant :
Sortie
Due date: February 09, 2004
Caractères de conversion pour Date et Heure
Caractère
Description
Exemple
c Date et heure complètes Mon May 04 09:51:52 CDT 2009
F Date ISO 8601 2004-02-09
D Date formatée US (mois/jour/année) 02/09/2004
T Heure 24h 18:05:19
r Heure 12h 06:05:19 pm
R Heure 24h, sans secondes 18:05
Y Année sur quatre chiffres (avec zéros initiaux) 2004
y Deux derniers chiffres de l'année (avec zéros initiaux) 04
C Deux premiers chiffres de l'année (avec zéros initiaux) 20
B Nom complet du mois February
b Nom abrégé du mois Feb
m Mois sur deux chiffres (avec zéros initiaux) 02
d Jour sur deux chiffres (avec zéros initiaux) 03
e Jour sur deux chiffres (sans zéros initiaux) 9
A Nom complet du jour de la semaine Monday
a Nom abrégé du jour de la semaine Mon
j Jour de l'année sur trois chiffres (avec zéros initiaux) 069
H Heure sur deux chiffres (avec zéros initiaux), entre 00 et 23 18
k Heure sur deux chiffres (sans zéros initiaux), entre 0 et 23 18
I Heure sur deux chiffres (avec zéros initiaux), entre 01 et 12 06
l Heure sur deux chiffres (sans zéros initiaux), entre 1 et 12 6
M Minutes sur deux chiffres (avec zéros initiaux) 05
S Secondes sur deux chiffres (avec zéros initiaux) 19
L Millisecondes sur trois chiffres (avec zéros initiaux) 047
N Nanosecondes sur neuf chiffres (avec zéros initiaux) 047000000
P Marqueur matin/après-midi en majuscules PM
p Marqueur matin/après-midi en minuscules pm
z Décalage numérique RFC 822 par rapport à GMT -0800
Z Fuseau horaire PST
s Secondes depuis 1970-01-01 00:00:00 GMT 1078884319
Q Millisecondes depuis 1970-01-01 00:00:00 GMT 1078884319047
Il existe d'autres classes utiles liées à la date et l'heure. Pour plus de détails, vous pouvez vous référer à la documentation standard Java.
Analyse de chaînes en dates
La classe SimpleDateFormat a quelques méthodes supplémentaires, notamment parse(), qui essaie d'analyser une chaîne selon le format stocké dans l'objet SimpleDateFormat donné.
Exemple
Live Demo
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
Un exemple d'exécution du programme ci-dessus produirait le résultat suivant :
Sortie
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Mise en veille pendant un moment
Vous pouvez mettre en veille pour n'importe quelle période, d'une milliseconde jusqu'à la durée de vie de votre ordinateur. Par exemple, le programme suivant mettrait en veille pendant 3 secondes :
Exemple
Live Demo
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Cela produira le résultat suivant :
Sortie
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Mesure du temps écoulé
Parfois, vous pouvez avoir besoin de mesurer un point dans le temps en millisecondes. Réécrivons l'exemple ci-dessus une fois de plus :
Exemple
Live Demo
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis();
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
long end = System.currentTimeMillis();
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Cela produira le résultat suivant :
Sortie
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
Classe GregorianCalendar
GregorianCalendar est une implémentation concrète d'une classe Calendar qui implémente le calendrier grégorien normal avec lequel vous êtes familier. Nous n'avons pas discuté de la classe Calendar dans ce tutoriel, vous pouvez consulter la documentation Java standard pour cela.
La méthode getInstance() de Calendar retourne un GregorianCalendar initialisé avec la date et l'heure actuelles dans la locale et le fuseau horaire par défaut. GregorianCalendar définit deux champs : AD et BC. Ceux-ci représentent les deux ères définies par le calendrier grégorien.
Il existe également plusieurs constructeurs pour les objets GregorianCalendar :
N°
Constructeur et Description
1 GregorianCalendar()
Construit un GregorianCalendar par défaut en utilisant l'heure actuelle dans le fuseau horaire par défaut avec la locale par défaut.
2 GregorianCalendar(int year, int month, int date)
Construit un GregorianCalendar avec la date donnée dans le fuseau horaire par défaut avec la locale par défaut.
3 GregorianCalendar(int year, int month, int date, int hour, int minute)
Construit un GregorianCalendar avec la date et l'heure données pour le fuseau horaire par défaut avec la locale par défaut.
4 GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
Construit un GregorianCalendar avec la date et l'heure données pour le fuseau horaire par défaut avec la locale par défaut.
5 GregorianCalendar(Locale aLocale)
Construit un GregorianCalendar basé sur l'heure actuelle dans le fuseau horaire par défaut avec la locale donnée.
6 GregorianCalendar(TimeZone zone)
Construit un GregorianCalendar basé sur l'heure actuelle dans le fuseau horaire donné avec la locale par défaut.
7 GregorianCalendar(TimeZone zone, Locale aLocale)
Construit un GregorianCalendar basé sur l'heure actuelle dans le fuseau horaire donné avec la locale donnée.
Voici la liste de quelques méthodes de support utiles fournies par la classe GregorianCalendar :
N°
Méthode et Description
1 void add(int field, int amount)
Ajoute la quantité (signée) spécifiée de temps au champ de temps donné, basé sur les règles du calendrier.
2 protected void computeFields()
Convertit UTC en millisecondes en valeurs de champs de temps.
3 protected void computeTime()
Remplace Calendar : convertit les valeurs de champs de temps en UTC en millisecondes.
4 boolean equals(Object obj)
Compare ce GregorianCalendar à une référence d'objet.
5 int get(int field)
Obtient la valeur pour un champ de temps donné.
6 int getActualMaximum(int field)
Retourne la valeur maximale que ce champ pourrait avoir, étant donné la date actuelle.
7 int getActualMinimum(int field)
Retourne la valeur minimale que ce champ pourrait avoir, étant donné la date actuelle.
8 int getGreatestMinimum(int field)
Retourne la valeur minimale la plus élevée pour le champ donné si elle varie.
9 Date getGregorianChange()
Obtient la date de changement du calendrier grégorien.
10 int getLeastMaximum(int field)
Retourne la valeur maximale la plus basse pour le champ donné si elle varie.
11 int getMaximum(int field)
Retourne la valeur maximale pour le champ donné.
12 Date getTime()
Obtient l'heure actuelle de ce Calendar.
13 long getTimeInMillis()
Obtient l'heure actuelle de ce Calendar comme un long.
14 TimeZone getTimeZone()
Obtient le fuseau horaire.
15 int getMinimum(int field)
Retourne la valeur minimale pour le champ donné.
16 int hashCode()
Remplace hashCode.
17 boolean isLeapYear(int year)
Détermine si l'année donnée est une année bissextile.
18 void roll(int field, boolean up)
Ajoute ou soustrait (haut/bas) une seule unité de temps sur le champ de temps donné sans changer les champs plus grands.
19 void set(int field, int value)
Définit le champ de temps avec la valeur donnée.
20 void set(int year, int month, int date)
Définit les valeurs pour les champs année, mois et date.
21 void set(int year, int month, int date, int hour, int minute)
Définit les valeurs pour les champs année, mois, date, heure et minute.
22 void set(int year, int month, int date, int hour, int minute, int second)
Définit les valeurs pour les champs année, mois, date, heure, minute et seconde.
23 void setGregorianChange(Date date)
Définit la date de changement du calendrier grégorien.
24 void setTime(Date date)
Définit l'heure actuelle de ce Calendar avec la Date donnée.
25 void setTimeInMillis(long millis)
Définit l'heure actuelle de ce Calendar à partir de la valeur long donnée.
26 void setTimeZone(TimeZone value)
Définit le fuseau horaire avec la valeur de fuseau horaire donnée.
27 String toString()
Retourne une représentation en chaîne de ce calendrier.
Exemple
Live Demo
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int year;
// Crée un calendrier grégorien initialisé
// avec la date et l'heure actuelles dans la
// locale et le fuseau horaire par défaut.
GregorianCalendar gcalendar = new GregorianCalendar();
// Affiche les informations de date et heure actuelles.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// Teste si l'année actuelle est bissextile
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
} else {
System.out.println("The current year is not a leap year");
}
}
}
Cela produira le résultat suivant :
Sortie
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
Pour une liste complète des constantes disponibles dans la classe Calendar, vous pouvez vous référer à la documentation Java standard.
Maîtriser les Tableaux Java : Guide Complet pour une Gestion Efficace des Données
Expressions régulières Java : Maîtriser la correspondance de motifs avec java.util.regex
Java
- Classes et objets C# : Fondations pour une POO robuste
- Récupérer la date et l'heure actuelles en Python : Guide pratique
- Variables et littéraux en Java : Guide complet
- Classes et objets en Java : Guide pratique
- Classes et méthodes abstraites en Java : guide complet
- Maîtriser les classes imbriquées et internes en Java : types, exemples et bonnes pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Java throw vs throws : maîtriser la gestion d'exceptions avec exemples pratiques
- Maîtriser l'autoboxing et l'unboxing Java : Exemples pratiques et bonnes pratiques