Formato ZonedDateTime su String

1. Panoramica

In questo rapido tutorial, vedremo come convertire un ZonedDateTime in una stringa.

Vedremo anche come analizzare un ZonedDateTime da una stringa.

2. Creazione di un ZonedDateTime

Innanzitutto, inizieremo con ZonedDateTime con un fuso orario UTC. Ci sono diversi modi in cui possiamo farlo.

Possiamo specificare l'anno, il mese, il giorno, ecc:

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

Possiamo anche creare un ZonedDateTime dalla data e dall'ora correnti:

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

Oppure, possiamo creare un ZonedDateTime da un LocalDateTime esistente :

LocalDateTime localDateTime = LocalDateTime.now(); ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));

3. ZonedDateTime su String

Ora, convertiamo il nostro ZonedDateTime in una stringa. Per questo, useremo la classe DateTimeFormatter .

Esistono alcuni formattatori speciali che possiamo utilizzare per visualizzare i dati del fuso orario. L'elenco completo dei formattatori può essere trovato qui, ma esamineremo alcuni di quelli più comuni.

Se vogliamo visualizzare l'offset del fuso orario, possiamo utilizzare il formattatore "Z" o "X" :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z"); String formattedString = zonedDateTime.format(formatter);

Questo ci darebbe un risultato come questo:

02/01/2018 - 13:45:30 +0000

Per includere il nome del fuso orario, possiamo utilizzare una "z" minuscola:

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z"); String formattedString2 = zonedDateTime.format(formatter2);

L'output di questo sarebbe:

02/01/2018 - 13:45:30 UTC

4. Stringa a ZonedDateTime

Questo processo può anche funzionare al contrario. Possiamo prendere una stringa e riconvertirla in ZonedDateTime .

Un'opzione per farlo è usare il metodo statico parse () della classe ZonedDateTime :

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

Questo metodo utilizza il formattatore ISO_ZONED_DATE_TIME . C'è anche una versione sovraccaricata del metodo che accetta un parametro DateTimeFormatter . Tuttavia, la stringa deve contenere un identificatore di zona o otterremo un'eccezione:

assertThrows(DateTimeParseException.class, () -> ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));

Una seconda opzione per ottenere un ZonedDateTime da una stringa prevede 2 passaggi: convertire la stringa in un LocalDateTime, quindi questo oggetto in un 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));

Questo metodo indiretto combina semplicemente la data e l'ora con un id di zona:

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]

Per ulteriori informazioni sull'analisi della stringa in base alle date, consulta il nostro articolo più approfondito sull'analisi della data.

5. conclusione

In questo articolo abbiamo visto come creare un ZonedDateTime e come formattarlo come String.

Abbiamo anche dato una rapida occhiata a come analizzare una stringa di data e ora e convertirla in ZonedDateTime .

Il codice sorgente di questo tutorial è disponibile su Github.