Convertir une chaîne en date en Java

Convertir une chaîne en date en Java

1. Vue d'ensemble

Dans ce didacticiel,we’ll explore several ways to convert String objects into Date objects. Nous allons commencer par la nouvelle APIDate Time -java.time qui a été introduite dans Java 8 avant d'examiner l'ancien type de donnéesjava.util.Date également utilisé pour représenter les dates.

Pour terminer, nous examinerons également certaines bibliothèques externes pour la conversion à l'aide de Joda-Time et de la classe Apache Commons LangDateUtils.

2. Conversion deString enLocalDate ouLocalDateTime

[.s1]#LocalDate #and LocalDateTime are objets date-heure immuables qui représentent une date et, plus tard, une date et une heure. Par défaut, les dates Java sont au format ISO-8601, donc si nous avons une chaîne qui représente une date et une heure dans ce format, alorswe can use the parse() API of these classes directly.

Here est un peu plus détaillé sur cette nouvelle API.

2.1. Utilisation de l'APIParse

The Date-Time API provide parse() methods for parsing a String that contains date and time information. To convert String objects to LocalDate and LocalDateTime objects, the String must represent a valid date or time selonISO_LOCAL_DATE ouISO_LOCAL_DATE_TIME.

Sinon, unDateTimeParseException sera renvoyé à l'exécution.

Dans notre premier exemple, convertissons unString enjava.time.LocalDate:

LocalDate date = LocalDate.parse("2018-05-05");

Une approche similaire à celle ci-dessus peut être utilisée pour convertir unString en unjava.time.LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");

Il est important de noter que les objetsLocalDate etLocalDateTime sont indépendants du fuseau horaire. Cependant, la méthodewhen we need to deal with time zone specific date and times we can use the ZonedDateTimeparse directement pour obtenir une heure de date spécifique au fuseau horaire:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2015-05-05T10:15:30+01:00[Europe/Paris]");

Voyons maintenant comment convertir des chaînes avec un format personnalisé.

2.2. Utilisation de l'APIParse avec un formateur personnalisé

La conversion d'unString avec un format de date personnalisé en un objetDate est une opération répandue en Java.

Pour cela,we’ll use the DateTimeFormatter class which provides numerous predefined formatters, et nous permet de définir un formateur.

Commençons par un exemple d'utilisation de l'un des formateurs prédéfinis deDateTimeFormatter:

String dateInString = "19590709";
LocalDate date = LocalDate.parse(dateInString, DateTimeFormatter.BASIC_ISO_DATE);

Dans l'exemple suivant, créons un formateur qui applique le format "EEE, MMM jyyyy". Ce format spécifie trois caractères pour le nom du jour complet de la semaine, un chiffre représentant le jour du mois, trois caractères représentant le mois et quatre chiffres représentant l’année.

Ce formateur reconnaît les chaînes telles que «Fri,  3 Jan 2003″ or “Wed, 23 Mar 1994»:

String dateInString = "Mon, 05 May 1980";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, d MMM yyyy", Locale.ENGLISH);
LocalDate dateTime = LocalDate.parse(dateInString, formatter);

2.3. Modèles de date et d'heure communs

Examinons quelques modèles de date et d'heure courants:

  • y – Année (1996; 96)

  • M – Mois dans l'année (juillet; juillet; 07)

  • d - Jour dans le mois (1-31)

  • E - Nom du jour dans la semaine (vendredi, dimanche)

  • a Marqueur am / pm (AM, PM)

  • H - Heure dans la journée (0-23)

  • h - Heure en am / pm (1-12)

  • m - Minute en heure (0-60)

  • s - Seconde en minute (0-60)

Pour une liste complète des symboles que nous pouvons utiliser pour spécifier un modèle d'analyse, cliquez surhere.

Si nous devons convertir les datesjava.time dans l'ancien objetjava.util.Date, lisez l'articlethis pour plus de détails.

3. Conversion deString enjava.util.Date

Before Java 8, the Java date and time mechanism was provided by the old APIs of java.util.Date, java.util.Calendar, and java.util.TimeZone classes avec lesquels nous devons parfois encore travailler.

Voyons comment convertir une chaîne en objetjava.util.Date:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

String dateInString = "7-Jun-2013";
Date date = formatter.parse(dateInString);

Dans l'exemple ci-dessus,we first need to construct a SimpleDateFormat object en passant le modèle décrivant le format de la date et de l'heure.

Ensuite, nous devons invoquer la méthodeparse() en passant la dateString. Si l'argumentString passé n'est pas dans le même format que le modèle, alors unParseException sera renvoyé.

3.1. Ajout d'informations sur le fuseau horaire àjava.util.Date

It’s important to note that the java.util.Date has no concept of time zone, et ne représente que le nombre de secondes écoulées depuis l'époque d'Unix - 1970-01-01T00: 00: 00Z.

Mais, lorsque nous imprimons directement l'objetDate, il sera toujours imprimé avec le fuseau horaire système par défaut de Java.

Dans ce dernier exemple, nous verrons comment mettre en forme une date, en ajoutant des informations sur le fuseau horaire:

SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a", Locale.ENGLISH);
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));

String dateInString = "22-01-2015 10:15:55 AM";
Date date = formatter.parse(dateInString);
String formattedDateString = formatter.format(date);

Nous pouvons également modifier le fuseau horaire de la JVM par programmation, mais ce n'est pas recommandé:

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

4. Bibliothèques externes

Maintenant que nous avons une bonne compréhension de la façon de convertir des objetsString en objetsDate à l'aide des nouvelles et anciennes API proposées par Java core, jetons un œil à quelques bibliothèques externes.

4.1. Bibliothèque Joda-Time

Une alternative aux bibliothèques principales JavaDate etTime estJoda-Time. Bien que les auteurs recommandent maintenant aux utilisateurs de migrer versjava.time (JSR-310) si ce n’est pas possible, alors lesJoda-Time library provides an excellent alternative for working with Date and Time. Cette bibliothèque fournit à peu près toutes les fonctionnalités prises en charge dans le projet Java 8Date Time.

L'artefact peut être trouvé surMaven Central:


    joda-time
    joda-time
    2.10

Voici un exemple rapide d'utilisation desDateTime standard:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);

Voyons également un exemple de définition explicite d'un fuseau horaire:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);
DateTime dateTimeWithZone = dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"));

4.2. Apache Commons Lang - DateUtils

La classeDateUtils fournit de nombreuxuseful utilities making it easier to work with the legacy Calendar and Date objects.

L'artefact commons-lang3 est disponible à partir deMaven Central:


    org.apache.commons
    commons-lang3
    3.7

Convertissons une dateString en utilisant unArray de modèles de date en unjava.util.Date:

String dateInString = "07/06-2013";
Date date = DateUtils.parseDate(dateInString,
  new String[] { "yyyy-MM-dd HH:mm:ss", "dd/MM-yyyy" });

5. Conclusion

Dans cet article, nous avons illustré plusieurs façons de convertir des chaînes en différents types d'objetsDate (avec et sans temps), à la fois en Java simple et en utilisant des bibliothèques externes.

Le code source complet de l'article est disponibleover on GitHub.