Ho il seguente DateTimeFormatter
.Visualizza nome fuso orario breve utilizzando DateTimeFormatter
DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a zzzz");
Io lo utilizzo per formattare un ZonedDateTime
come questo:
ZonedDateTime disableTime = Instant.now()
.plus(Duration.ofDays(21))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(-5)));
System.out.println(DATE_TIME_FORMATTER.format(disableTime));
Vorrei che questo per ouput una stringa data formattata, come il seguente:
09/16/2015 alle 13:15:45 EDT
Ma ciò che sta ottenendo output è questo:
09/16/2015 a 01: 1 17:45 UTC + 05: 00
Non importa se io uso z
, zz
, zzz
o zzzz
nel modello, diventa sempre output nel formato di cui sopra.
C'è un modo diverso per creare il ZonedDateTime
che mi darà l'output desiderato o sto facendo qualcosa di sbagliato nel modello?
Come per la DateTimeFormatter
documentation, O
dovrebbero essere utilizzati per visualizzare la zona localizzata-offset, come UTC-05:00
, mentre z
dovrebbero essere utilizzati per visualizzare il nome di fuso orario, come Eastern Daylight Time
, o EDT
.
Ho usato 'ZoneId.of (" America/New_York ")' e mi ha dato il risultato desiderato. Grazie! –
C'è un motivo per cui il pacchetto java.time non riconosce 'ZoneId.ofOffset (" UTC ", ZoneOffset.ofHours (-5))' è equivalente a 'ZoneId.of (" America/New_York ")'? O non sono equivalenti? –
Ah, non importa. È perché 'ZoneId.ofOffset (" UTC ", ZoneOffset.ofHours (-5))' avrà sempre un offset UTC-05: 00, mentre "ZoneId.of (" America/New_York) "si alternerà tra UTC-05: 00 e UTC-04: 00, in base all'ora legale, quindi non sono equivalenti: ora ha senso –