我有以下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
无论我在模式中使用z
,zz
,zzz
还是zzzz
,都会以上述格式输出。
是否有不同的方法可以创建ZonedDateTime
来提供所需的输出,或者我在模式中做错了什么?
根据DateTimeFormatter
documentation,O
应该用于显示本地化的区域偏移量,例如UTC-05:00
,而应使用z
显示时区名称,例如Eastern Daylight Time
或EDT
。
答案 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();