Formater ZonedDateTime til streng
1. Oversigt
I denne hurtige vejledning ser vi, hvordan man konverterer en ZonedDateTime til en Snor.
Vi vil også se på, hvordan man analyserer a ZonedDateTime fra en Snor.
2. Oprettelse af en ZonedDateTime
Først starter vi med en ZonedDateTime med tidszonen UTC. Der er flere måder, vi kan opnå dette på.
Vi kan specificere år, måned, dag osv .:
ZonedDateTime zonedDateTimeOf = ZonedDateTime.of (2018, 01, 01, 0, 0, 0, 0, ZoneId.of ("UTC"));
Vi kan også oprette en ZonedDateTime fra den aktuelle dato og tid:
ZonedDateTime zonedDateTimeNow = ZonedDateTime.now (ZoneId.of ("UTC"));
Eller vi kan oprette en ZonedDateTime fra en eksisterende LocalDateTime:
LocalDateTime localDateTime = LocalDateTime.now (); ZonedDateTime zonedDateTime = ZonedDateTime.of (localDateTime, ZoneId.of ("UTC"));
3. ZonedDateTime til Snor
Lad os nu konvertere vores ZonedDateTime til en Snor. For det, vi bruger DateTimeFormatter klasse.
Der er et par specielle formater, som vi kan bruge til at vise tidszondata. Den fulde liste over formatere kan findes her, men vi ser på et par af de mere almindelige.
Hvis vi vil for at vise tidszoneforskydningen kan vi bruge formatering “Z” eller “X”:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("MM / dd / åååå - HH: mm: ss Z"); String formattedString = zonedDateTime.format (formatter);
Dette ville give os et resultat som dette:
02/01/2018 - 13:45:30 +0000
For at inkludere tidszonenavnet kan vi bruge en lille "z":
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern ("MM / dd / åååå - HH: mm: ss z"); String formattedString2 = zonedDateTime.format (formatter2);
Resultatet af dette ville være:
02/01/2018 - 13:45:30 UTC
4. Snor til ZonedDateTime
Denne proces kan også arbejde omvendt. Vi kan tage en streng og konvertere den tilbage til en ZonedDateTime.
En mulighed for at gøre dette er ved at bruge statisk parse () metode til ZonedDateTime klasse:
ZonedDateTime zonedDateTime = ZonedDateTime.parse ("2011-12-03T10: 15: 30 + 01: 00");
Denne metode bruger ISO_ZONED_DATE_TIME formatering. Der er også en overbelastet version af metoden, der tager en DateTimeFormatter parameter. Strengen skal dog indeholde en zone-id, ellers får vi en undtagelse:
assertThrows (DateTimeParseException.class, () -> ZonedDateTime.parse ("2011-12-03T10: 15: 30", DateTimeFormatter.ISO_DATE_TIME));
En anden mulighed for at få en ZonedDateTime fra en Snor involverer 2 trin: konvertering af strengen til en LocalDateTime, derefter dette objekt til en ZonedDateTime:
ZoneId timeZone = ZoneId.systemDefault (); ZonedDateTime zonedDateTime = LocalDateTime.parse ("2011-12-03T10: 15: 30", DateTimeFormatter.ISO_DATE_TIME) .atZone (timeZone); log.info (zonedDateTime.format (DateTimeFormatter.ISO_ZONED_DATE_TIME));
Denne indirekte metode kombinerer simpelthen datoen med et zone-id:
INFO: 2011-12-03T10: 15: 30 + 02: 00 [Europa / Athen]
For at lære mere om parsing String to dates, se vores mere detaljerede parsing-artikel.
5. Konklusion
I denne artikel har vi set hvordan man opretter en ZonedDateTime, og hvordan man formaterer det som en Snor.
Vi har også taget et hurtigt kig på, hvordan man analyserer en dato-tidsstreng og konverterer til en ZonedDateTime.
Kildekoden til denne vejledning er tilgængelig på Github.