Classe SimpleDateFormat de Java

SimpleDateFormatest une classe de Java utilisée pour formater et analyser la date et l'heure, appartenant aujava.textpackage. Il vous permet de convertir des objets de date (Date) en chaînes de caractères dans un format spécifique, ou analyser des chaînes de date formatées pour les reconvertir en objets de date.


Utilisation de base

1. Création d'un objet SimpleDateFormat

Pour utiliserSimpleDateFormat, vous devez d'abord créer une instance et spécifier un modèle de format de date :

Exemple

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // Créer un objet SimpleDateFormat et spécifier le format
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        // Obtenir la date et l'heure actuelles
        Date now = new Date();
       
        // Formater la date sous forme de chaîne de caractères
        String formattedDate = sdf.format(now);
        System.out.println("Heure actuelle : " + formattedDate);
    }
}

La sortie est :

当前时间: 2025-05-01 11:35:07

2. Symboles courants de modèle de format

Voici les symboles courants de modèle de format :

Symbole Signification Exemple
yyyy Année à quatre chiffres 2023
MM Mois à deux chiffres 01-12
dd Jour à deux chiffres 01-31
HH Heure au format 24 heures 00-23
mm Minute 00-59
ss Seconde 00-59
E Jour de la semaine Lun, Mar, etc.
a Marqueur AM/PM AM ou PM

Formatage de la date

vaDateFormater l'objet en chaîne :

Exemple

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEEE a hh:mm:ss");
Date now = new Date();
System.out.println(sdf.format(now));
// Exemple de sortie : 2023-11-15 mercredi PM 03:45:22

Analyse de la date

Analyser la chaîne de date formatée en unDateobjet :

Exemple

try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateString = "2023-11-15";
    Date date = sdf.parse(dateString);
    System.out.println(date);
    // Sortie : Wed Nov 15 00:00:00 CST 2023
} catch (ParseException e) {
    e.printStackTrace();
}

Remarque : l'analyse peut lever une exceptionParseException, donc la gestion des exceptions est nécessaire.


Problème de sécurité des threads

SimpleDateFormatIl n'est pas thread-safe. Si la mêmeSimpleDateFormatinstance est partagée dans un environnement multithread, cela peut causer des problèmes. Solutions :

  1. Créer une nouvelle instance à chaque fois qu'il est utilisé (performances réduites)
  2. UtiliserThreadLocalpour conserver une instance pour chaque thread
  3. Utilisez les classes de Java 8DateTimeFormatter(recommandé)

Exemple

// Solution utilisant ThreadLocal
private static final ThreadLocal<SimpleDateFormat> dateFormat =
    ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));

// Utilisation
String formattedDate = dateFormat.get().format(new Date());

Alternative Java 8

Dans Java 8 et les versions ultérieures, il est recommandé d'utiliserjava.timeclasses du package :

Exemple

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Créer un formateur
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
       
        // Obtenir l'heure actuelle et la formater
        LocalDateTime now = LocalDateTime.now();
        String formattedDate = now.format(formatter);
        System.out.println("Heure actuelle : " + formattedDate);
       
        // Analyser la chaîne en une date-heure
        LocalDateTime parsedDate = LocalDateTime.parse("2023-11-15 14:30:00", formatter);
        System.out.println("Heure analysée : " + parsedDate);
    }
}

DateTimeFormatterIl est thread-safe, offre de meilleures performances et est recommandé pour une utilisation dans de nouveaux projets.


Résumé

  1. SimpleDateFormatUtilisé pour le formatage et l'analyse des dates
  2. Spécifier le format de date via des chaînes de modèle
  3. Non thread-safe ; vous devez faire attention à son utilisation dans des environnements multi-threadés
  4. Pour Java 8 et versions ultérieures, il est recommandé d'utiliserDateTimeFormatter

En maîtrisantSimpleDateFormat, vous pouvez gérer de manière flexible les besoins de conversion de divers formats de date et d'heure dans les programmes Java.

Voici les méthodes courantes de la classe java.text.SimpleDateFormat :

Constructeurs

Méthode Description
SimpleDateFormat() Construit un objet à l'aide du modèle par défaut et des symboles de format de date de la locale par défaut
SimpleDateFormat(String pattern) Construit un objet à l'aide du modèle donné et des symboles de format de date de la locale par défaut
SimpleDateFormat(String pattern, Locale locale) Construit un objet à l'aide du modèle donné et des symboles de format de date de la locale donnée

Symboles courants de modèle de format

Symbole Signification Exemple
y année yyyy → 2023
M month MM → 07, MMM → juil., MMMM → juillet
d Jour du mois dd → 15
H Heure (0-23) HH → 14
h Heure (1-12) hh → 02
m Minute mm → 30
s second ss → 45
S Milliseconde SSS → 789
E Jour de la semaine EEE → lun., EEEE → lundi
a Marqueur AM/PM a → PM
z Fuseau horaire z → CST, zzzz → heure normale de Chine

Méthodes principales

Méthode Description
String format(Date date) Formate un objet Date en une chaîne date/heure
Date parse(String source) Analyse le texte d'une chaîne pour produire un objet Date
void applyPattern(String pattern) Applique un nouveau modèle de date et d'heure
String toPattern() Retourne la chaîne de modèle de date et d'heure actuelle
void setTimeZone(TimeZone zone) Définit le fuseau horaire
TimeZone getTimeZone() Obtient le fuseau horaire
void setLenient(boolean lenient) Définit si l'analyse est tolérante (true par défaut)
boolean isLenient() Détermine si l'analyse est tolérante
Autres extensions