Comment parsingr / formater les dates avec LocalDateTime? (Java 8)

Java 8 a ajouté une nouvelle API java.time pour travailler avec les dates et les heures ( JSR 310 ).

J’ai la date et l’heure comme chaîne (par exemple "2014-04-08 12:30" ). Comment puis-je obtenir une instance de LocalDateTime partir de la chaîne donnée?

Après avoir fini de travailler avec l’object LocalDateTime : Comment puis-je reconvertir l’instance LocalDateTime en une chaîne ayant le même format que ci-dessus?

Date et heure de l’parsing

Pour créer un object LocalDateTime partir d’une chaîne, vous pouvez utiliser la LocalDateTime.parse() statique LocalDateTime.parse() . Il prend une chaîne et un DateTimeFormatter en paramètre. Le DateTimeFormatter est utilisé pour spécifier le modèle de date / heure.

 Ssortingng str = "1986-04-08 12:30"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime dateTime = LocalDateTime.parse(str, formatter); 

Formatage de la date et de l’heure

Pour créer une chaîne formatée à partir d’un object LocalDateTime , vous pouvez utiliser la méthode format() .

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30); Ssortingng formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30" 

Notez qu’il existe des formats de date / heure couramment utilisés, prédéfinis en tant que constantes dans DateTimeFormatter . Par exemple: Si vous LocalDateTime DateTimeFormatter.ISO_DATE_TIME pour formater l’instance LocalDateTime ci-dessus, vous obtiendrez la chaîne "1986-04-08T12:30:00" .

Les méthodes parse() et format() sont disponibles pour tous les objects liés à la date / heure (par exemple, LocalDate ou ZonedDateTime ).

Vous pouvez également utiliser LocalDate.parse() ou LocalDateTime.parse() sur une Ssortingng sans lui fournir de modèle, si la Ssortingng est au format ISO-8601 .

par exemple,

 Ssortingng strDate = "2015-08-04"; LocalDate aLD = LocalDate.parse(strDate); System.out.println("Date: " + aLD); Ssortingng strDatewithTime = "2015-08-04T10:11:30"; LocalDateTime aLDT = LocalDateTime.parse(strDatewithTime); System.out.println("Date with Time: " + aLDT); 

Sortie ,

 Date: 2015-08-04 Date with Time: 2015-08-04T10:11:30 

et utilisez DateTimeFormatter uniquement si vous devez gérer d’autres modèles de date. Par exemple, dd MMM uuuu représente le jour du mois (deux chiffres), trois lettres du nom du mois (Jan, Feb, Mar, …) et une année à quatre chiffres:

 DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu"); Ssortingng anotherDate = "04 Aug 2015"; LocalDate lds = LocalDate.parse(anotherDate, dTF); System.out.println(anotherDate + " parses to " + lds); 

Sortie

 04 Aug 2015 parses to 2015-08-04 

Rappelez-vous également que l’object DateTimeFormatter est bidirectionnel; il peut à la fois parsingr les entrées et les formats.

 Ssortingng strDate = "2015-08-04"; LocalDate aLD = LocalDate.parse(strDate); DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu"); System.out.println(aLD + " formats as " + dTF.format(aLD)); 

Sortie

 2015-08-04 formats as 04 Aug 2015 

(voir la liste complète des modèles pour le formatage et l’parsing syntaxique DateFormatter )

  Symbol Meaning Presentation Examples ------ ------- ------------ ------- G era text AD; Anno Domini; A u year year 2004; 04 y year-of-era year 2004; 04 D day-of-year number 189 M/L month-of-year number/text 7; 07; Jul; July; J d day-of-month number 10 Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter Y week-based-year year 1996; 96 w week-of-week-based-year number 27 W week-of-month number 4 E day-of-week text Tue; Tuesday; T e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T F week-of-month number 3 a am-pm-of-day text PM h clock-hour-of-am-pm (1-12) number 12 K hour-of-am-pm (0-11) number 0 k clock-hour-of-am-pm (1-24) number 0 H hour-of-day (0-23) number 0 m minute-of-hour number 30 s second-of-minute number 55 S fraction-of-second fraction 978 A milli-of-day number 1234 n nano-of-second number 987654321 N nano-of-day number 1234000000 V time-zone ID zone-id America/Los_Angeles; Z; -08:30 z time-zone name zone-name Pacific Standard Time; PST O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00; X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15; x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15; Z zone-offset offset-Z +0000; -0800; -08:00; p pad next pad modifier 1 ' escape for text delimiter '' single quote literal ' [ optional section start ] optional section end # reserved for future use { reserved for future use } reserved for future use 

Les deux réponses ci-dessus expliquent très bien la question concernant les motifs de cordes. Cependant, juste au cas où vous travaillez avec ISO 8601, il n’est pas nécessaire d’appliquer DateTimeFormatter puisque LocalDateTime y est déjà préparé:

Convertir LocalDateTime en chaîne de fuseau horaire ISO8601

 LocalDateTime ldt = LocalDateTime.now(); ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); //you might use a different zone Ssortingng iso8601 = zdt.toSsortingng(); 

Convertir la chaîne ISO8601 en un LocalDateTime

 Ssortingng iso8601 = "2016-02-14T18:32:04.150Z"; ZonedDateTime zdt = ZonedDateTime.parse(iso8601); LocalDateTime ldt = zdt.toLocalDateTime();