使用DateTimeFormatter显示短时区名称

时间:2015-08-26 18:22:57

标签: java java-8 java-time

我有以下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));

我希望输出格式化的日期字符串,如下所示:

2015年9月16日美国东部时间下午01:15:45

但是输出的是:

2015年9月16日下午01:15:45 UTC-05:00

无论我在模式中使用zzzzzz还是zzzz,都会以上述格式输出。

是否有不同的方法可以创建ZonedDateTime来提供所需的输出,或者我在模式中做错了什么?

根据DateTimeFormatter documentationO应该用于显示本地化的区域偏移量,例如UTC-05:00,而应使用z显示时区名称,例如Eastern Daylight TimeEDT

1 个答案:

答案 0 :(得分:6)

这是因为您使用匿名UTC偏移量。尝试使用名为ZoneId

ZonedDateTime disableTime = Instant.now()
     .plus(Duration.ofDays(21))
     .atZone(ZoneId.of("Africa/Nairobi"));

打印(" Ora dell' Africa orientale "是意大利本地化名称)

09/16/2015 at 09:34:44 PM Ora dell'Africa orientale

您可以使用

获取用于存储和检索用户首选项的可用名称列表
Set<String> ids = ZoneId.getAvailableZoneIds();