У меня есть DateTimeFormatter
.Показывать короткое имя часового пояса, используя DateTimeFormatter
DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a zzzz");
Я использую его для форматирования ZonedDateTime
так:
ZonedDateTime disableTime = Instant.now()
.plus(Duration.ofDays(21))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(-5)));
System.out.println(DATE_TIME_FORMATTER.format(disableTime));
Я хотел бы, чтобы это Ouput отформатированной строки даты, как показано на следующем:
09/16/2015 в 1:15:45 PM EDT
Но что получает выход заключается в следующем:
09/16/2015 в 01: 1 5:45 вечера UTC-05: 00
Независимо от того, используют ли я z
, zz
, zzz
или zzzz
в шаблоне, он всегда получает выход в вышеуказанном формате.
Есть ли другой способ создать ZonedDateTime
, который даст мне желаемый результат, или я делаю что-то неправильно в шаблоне?
В соответствии с DateTimeFormatter
documentation, O
должен быть использован для отображения локализованной зоны смещения, например, UTC-05:00
, в то время как z
следует использовать для отображения имени часового пояса, таких как Eastern Daylight Time
или EDT
.
Я использовал 'ZoneId.of (« America/New_York »)', и это дало мне желаемый результат. Спасибо! –
Есть ли причина, по которой пакет java.time не распознает 'ZoneId.ofOffset (« UTC », ZoneOffset.ofHours (-5))' эквивалентно 'ZoneId.of (« Америка/Новый_York »)'? Или они не эквивалентны? –
Ах, неважно. Это потому, что 'ZoneId.ofOffset (« UTC », ZoneOffset.ofHours (-5))' всегда будет иметь смещение UTC-05: 00, в то время как 'ZoneId.of (« America/New_York ») будет чередоваться между UTC-05: 00 и UTC-04: 00, в зависимости от летнего времени, поэтому они не эквивалентны. Теперь имеет смысл. –