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.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
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
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 :
- Créer une nouvelle instance à chaque fois qu'il est utilisé (performances réduites)
- Utiliser
ThreadLocalpour conserver une instance pour chaque thread - Utilisez les classes de Java 8
DateTimeFormatter(recommandé)
Exemple
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.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é
SimpleDateFormatUtilisé pour le formatage et l'analyse des dates- Spécifier le format de date via des chaînes de modèle
- Non thread-safe ; vous devez faire attention à son utilisation dans des environnements multi-threadés
- Pour Java 8 et versions ultérieures, il est recommandé d'utiliser
DateTimeFormatter
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 |