Classe Date de Java
En Java,Datela classe se trouve dansjava.utille package, et elle représente un instant précis, à la milliseconde près.
La classe Date est principalement utilisée pour représenter des informations de date et d'heure, et elle est l'une des classes de base pour la gestion des dates et des heures en Java.
Il convient de noter qu'après Java 8, une nouvelle API de date et d'heure a été introduite (java.timepackage). Elle estDateplus puissante et plus facile à utiliser que la classe. Cependant, dans de nombreuses bases de code héritées, vous verrez encoreDatel'utilisation de la classe.
Utilisation de base de la classe Date
Création d'un objet Date
La classe Date a plusieurs constructeurs ; les deux manières les plus couramment utilisées sont :
Exemple
Date currentDate = new Date();
// Créer un objet Date pour un instant spécifié (millisecondes depuis le 1er janvier 1970 00:00:00 GMT)
Date specificDate = new Date(1640995200000L); // 1er janvier 2022 00:00:00 GMT
Méthodes courantes
La classe Date fournit plusieurs méthodes couramment utilisées :
Exemple
// Obtenir le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 GMT
long timeInMillis = date.getTime();
// Définir l'heure (millisecondes depuis le 1er janvier 1970 00:00:00 GMT)
date.setTime(1640995200000L);
// Comparer deux dates
Date anotherDate = new Date();
int result = date.compareTo(anotherDate); // Renvoie -1 si avant, 0 si égal, 1 si après
// Vérifier si la date est postérieure à la date spécifiée
boolean isAfter = date.after(anotherDate);
// Vérifier si la date est antérieure à la date spécifiée
boolean isBefore = date.before(anotherDate);
Formatage de la classe Date
La classe Date elle-même ne fournit pas de fonctionnalité de formatage, mais nous pouvons utiliser laSimpleDateFormatclasse pour formater et analyser les dates.
Exemple de formatage de date
Exemple
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
Date date = new Date();
// Créer un objet formateur
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat(yyyy-MM-dd E HH:mm:ss);
// Formater la date
String formattedDate1 = sdf1.format(date);
String formattedDate2 = sdf2.format(date);
System.out.println("Format 1 : " + formattedDate1);
System.out.println("Format 2 : " + formattedDate2);
}
}
Le résultat de sortie est:
格式1: 2025-05-01 11:33:43 格式2: 2025年05月01日 周四 11时33分43秒
Modèles de format courants
| Lettre | Signification | Exemple |
|---|---|---|
| y | année | yyyy → 2023 |
| M | month | MM → 01, MMM → janv. |
| d | jour | dd → 05 |
| H | Heure (24 heures) | HH → 13 |
| h | Heure (12 heures) | hh → 01 |
| m | Minute | mm 30 |
| s | second | ss → 45 |
| S | Milliseconde | SSS → 789 |
| E | Jour de la semaine | E → lundi |
| a | Marqueur AM/PM | a PM |
Exemple complet
Voici un exemple simple de :
Exemple
import java.text.SimpleDateFormat;
public class DateDemo {
public static void main(String[] args) {
// 1. Créer un objet Date représentant l'heure actuelle
Date now = new Date();
System.out.println("Heure actuelle : " + now);
// 2. Créer un objet Date pour une heure spécifique (obsolète, non recommandé)
@SuppressWarnings("deprecation")
Date oldDate = new Date(123, 4, 15); // 15 mai 2023 (mois 0-11)
System.out.println("Date spécifique : " + oldDate);
// 3. Créer un objet Date à partir d'un horodatage (recommandé)
Date dateFromTimestamp = new Date(1684131330000L); // 2023-05-15 10:15:30
System.out.println("Créé à partir de l'horodatage : " + dateFromTimestamp);
// 4. Formater l'affichage de la date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(now);
System.out.println("Date formatée : " + formattedDate);
// 5. Analyser une chaîne en une Date
try {
Date parsedDate = sdf.parse("2023-05-15 10:30:00");
System.out.println("Date analysée : " + parsedDate);
} catch (Exception e) {
e.printStackTrace();
}
// 6. Obtenir l'horodatage
long timestamp = now.getTime();
System.out.println("Horodatage : " + timestamp);
// 7. Comparer les dates
System.out.println("Est-ce que maintenant est après dateFromTimestamp : " + now.after(dateFromTimestamp));
System.out.println("Est-ce que maintenant est avant dateFromTimestamp : " + now.before(fromTimestamp));
}
}
Le résultat de sortie est:
当前时间: Thu May 01 11:33:05 CST 2025 特定日期: Mon May 15 00:00:00 CST 2023 从时间戳创建: Mon May 15 14:15:30 CST 2023 格式化日期: 2025-05-01 11:33:05 解析后的日期: Mon May 15 10:30:00 CST 2023 时间戳: 1746070385401 now 是否在 dateFromTimestamp 之后: true now 是否在 dateFromTimestamp 之前: false
Limites de la classe Date
Bien que la classe Date soit encore utilisable dans de nombreux cas, elle présente quelques limites évidentes :
- Non thread-safe: les objets Date sont mutables, ce qui peut causer des problèmes dans des environnements multithread.
- Médiocre: les mois commencent à 0 (0 signifie 0), et les années sont comptées à partir de 1900, ce qui prête facilement à confusion.
- Gestion complexe des fuseaux horaires: la classe Date elle-même ne contient pas d'informations de fuseau horaire ; la gestion des fuseaux horaires nécessite des classes supplémentaires.
- Fonctionnalités limitées: elle manque de nombreuses fonctionnalités courantes de manipulation de dates, comme l'ajout ou la soustraction de jours, de semaines, etc.
Alternative : API Date-Time de Java 8
Java 8 a introduit une nouvelle API de date et d'heure (java.timepackage), qui résout de nombreux problèmes de la classe Date :
Exemple
import java.time.format.DateTimeFormatter;
public class NewDateTimeExample {
public static void main(String[] args) {
// Obtenir la date et l'heure actuelles
LocalDateTime now = LocalDateTime.now();
// Format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = now.format(formatter);
System.out.println("Heure actuelle : " + formattedDateTime);
}
}
La nouvelle API date-heure offre plus de fonctionnalités, telles que :
LocalDate- Contient uniquement la dateLocalTime- Contient uniquement l'heureLocalDateTime- Contient la date et l'heureZonedDateTime- Contient la date, l'heure et le fuseau horaire- Méthodes riches de manipulation de dates
Résumé
DateLa classe est une classe de base en Java pour représenter la date et l'heure, mais elle présente certaines limites.- Utilisation
SimpleDateFormatpeut formater et analyser des chaînes de date. - À partir de Java 8, il est recommandé d'utiliser la nouvelle
java.timeAPI au lieu deDatela classe. - Lors de la maintenance de code hérité, comprendre
Datela classe reste importante.
Si vous développez un nouveau projet, il est recommandé de privilégier la nouvelle API date-heure de Java 8, car elle est plus intuitive, puissante et sûre pour les threads.
Voici les méthodes courantes de la classe java.util.Date :
Constructeurs
| Méthode | Description | Remarques |
|---|---|---|
Date() |
Créer un objet Date représentant l'heure actuelle | Obsolète, il est recommandé d'utilisernew Date()ouCalendar.getInstance() |
Date(long date) |
Créer un objet Date en fonction du nombre de millisecondes spécifié | Le nombre de millisecondes est calculé à partir du 1er janvier 1970 00:00:00 GMT |
Méthodes courantes
| Méthode | Description | Remarques |
|---|---|---|
boolean after(Date when) |
Teste si cette date est postérieure à la date spécifiée | |
boolean before(Date when) |
Teste si cette date est antérieure à la date spécifiée | |
Object clone() |
Renvoie une copie de cet objet | |
int compareTo(Date anotherDate) |
Compare l'ordre de deux dates | |
boolean equals(Object obj) |
Compare deux dates pour vérifier leur égalité | |
long getTime() |
Renvoie le nombre de millisecondes depuis le 1er janvier 1970 | |
void setTime(long time) |
Définit cet objet Date à l'aide d'une valeur en millisecondes | |
String toString() |
Convertit l'objet Date en une représentation sous forme de chaîne | Exemple de format : "Tue Jun 22 13:07:00 CST 2021" |
Méthodes obsolètes (non recommandées)
| Méthode | Description | Remplacement |
|---|---|---|
int getDate() |
Obtient le jour du mois (1-31) | UtiliserCalendar.get(Calendar.DATE) |
int getDay() |
Obtenir le jour de la semaine (0-6) | UtiliserCalendar.get(Calendar.DAY_OF_WEEK) |
int getHours() |
Obtenir l'heure (0-23) | UtiliserCalendar.get(Calendar.HOUR_OF_DAY) |
int getMinutes() |
Obtenir les minutes (0-59) | UtiliserCalendar.get(Calendar.MINUTE) |
int getMonth() |
Obtenir le mois (0-11) | UtiliserCalendar.get(Calendar.MONTH) |
int getSeconds() |
Obtenir les secondes (0-59) | UtiliserCalendar.get(Calendar.SECOND) |
int getYear() |
Obtenir l'année (à partir de 1900) | UtiliserCalendar.get(Calendar.YEAR) |
void setDate(int date) |
Définir le jour du mois | UtiliserCalendar.set(Calendar.DATE, date) |
void setHours(int hours) |
Définir l'heure | UtiliserCalendar.set(Calendar.HOUR_OF_DAY, hours) |
void setMinutes(int minutes) |
Définir les minutes | UtiliserCalendar.set(Calendar.MINUTE, minutes) |
void setMonth(int month) |
Définir le mois | UtiliserCalendar.set(Calendar.MONTH, month) |
void setSeconds(int seconds) |
Définir les secondes | UtiliserCalendar.set(Calendar.SECOND, seconds) |
void setYear(int year) |
Définir l'année | UtiliserCalendar.set(Calendar.YEAR, year) |