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

// Créer un objet Date représentant l'heure actuelle
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

Date date = new Date();

// 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.text.SimpleDateFormat;
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.util.Date;
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 :

  1. Non thread-safe: les objets Date sont mutables, ce qui peut causer des problèmes dans des environnements multithread.
  2. 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.
  3. 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.
  4. 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.LocalDateTime;
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 date
  • LocalTime- Contient uniquement l'heure
  • LocalDateTime- Contient la date et l'heure
  • ZonedDateTime- Contient la date, l'heure et le fuseau horaire
  • Méthodes riches de manipulation de dates

Résumé

  1. DateLa classe est une classe de base en Java pour représenter la date et l'heure, mais elle présente certaines limites.
  2. UtilisationSimpleDateFormatpeut formater et analyser des chaînes de date.
  3. À partir de Java 8, il est recommandé d'utiliser la nouvellejava.timeAPI au lieu deDatela classe.
  4. Lors de la maintenance de code hérité, comprendreDatela 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)
Autres extensions