Formatar ZonedDateTime para String
1. Visão geral
Neste tutorial rápido, veremos como converter umZonedDateTime em umString.
Também veremos como analisar umZonedDateTime de umString.
2. Criando umZonedDateTime
Primeiro, vamos começar comZonedDateTime com fuso horário UTC. Existem várias maneiras de conseguir isso.
Podemos especificar o ano, mês, dia, etc:
ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));
Também podemos criar umZonedDateTime a partir da data e hora atuais:
ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));
Ou podemos criar umZonedDateTime a partir de umLocalDateTime existente:
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));
3. ZonedDateTime aString
Agora, vamos converter nossoZonedDateTime em umString.. Para isso,we’ll use the DateTimeFormatter class.
Existem alguns formatadores especiais que podemos usar para exibir dados de fuso horário. A lista completa de formatadores pode ser encontradahere, mas veremos alguns dos mais comuns.
Se quisermos o formatadorto display the time zone offset, we can use the“Z” or “X”:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
String formattedString = zonedDateTime.format(formatter);
Isso nos daria um resultado como este:
02/01/2018 - 13:45:30 +0000
Para incluir o nome do fuso horário, podemos usar um “z” minúsculo:
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z");
String formattedString2 = zonedDateTime.format(formatter2);
A saída disso seria:
02/01/2018 - 13:45:30 UTC
4. String aZonedDateTime
Esse processo também pode funcionar ao contrário. Podemos pegar uma string e convertê-la de volta emZonedDateTime.
Uma opção para fazer isso é usar ostatic parse() method of the ZonedDateTime class:
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");
Este método usa o formatadorISO_ZONED_DATE_TIME. Também há uma versão sobrecarregada do método que usa um parâmetroDateTimeFormatter. No entanto, a String deve conter um identificador de zona ou teremos uma exceção:
assertThrows(DateTimeParseException.class, () ->
ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));
Uma segunda opção para obter umZonedDateTime de umString envolve 2 etapas:converting the String to a LocalDateTime, then this object to a 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));
Esse método indireto simplesmente combina a data e hora com um ID de zona:
INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]
Para saber mais sobre como analisar String para datas, verifique nossa análise de data mais detalhadaarticle.
5. Conclusão
Neste artigo, vimos como criar umZonedDateTime e formatá-lo como umString.
Também demos uma olhada rápida em como analisar uma string de data e hora e convertê-la emZonedDateTime.
O código-fonte deste tutorial está disponívelover on Github.