使用 DateTimeFormatter 显示短时区名称
Display short time zone name using 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));
我希望输出格式化的日期字符串,如下所示:
09/16/2015 at 01:15:45 PM EDT
但是得到的输出是这样的:
09/16/2015 at 01:15:45 PM UTC-05:00
无论我在模式中使用 z
、zz
、zzz
还是 zzzz
,它总是以上述格式输出。
是否有不同的方法来创建 ZonedDateTime
以提供所需的输出,或者我在模式中做错了什么?
根据DateTimeFormatter
documentation,O
应该用于显示局部区域偏移,例如UTC-05:00
,而z
应该用于显示时区名称,如Eastern Daylight Time
,或EDT
.
这是因为您使用了匿名 UTC 偏移量。尝试使用命名 ZoneId
而不是
ZonedDateTime disableTime = Instant.now()
.plus(Duration.ofDays(21))
.atZone(ZoneId.of("Africa/Nairobi"));
prints(“Ora dell'Africa orientale”是意大利本地化名称)
09/16/2015 at 09:34:44 PM Ora dell'Africa orientale
您可以获得可用名称的列表,这些名称应该用于存储和检索用户的首选项
Set<String> ids = ZoneId.getAvailableZoneIds();
我有以下 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));
我希望输出格式化的日期字符串,如下所示:
09/16/2015 at 01:15:45 PM EDT
但是得到的输出是这样的:
09/16/2015 at 01:15:45 PM UTC-05:00
无论我在模式中使用 z
、zz
、zzz
还是 zzzz
,它总是以上述格式输出。
是否有不同的方法来创建 ZonedDateTime
以提供所需的输出,或者我在模式中做错了什么?
根据DateTimeFormatter
documentation,O
应该用于显示局部区域偏移,例如UTC-05:00
,而z
应该用于显示时区名称,如Eastern Daylight Time
,或EDT
.
这是因为您使用了匿名 UTC 偏移量。尝试使用命名 ZoneId
而不是
ZonedDateTime disableTime = Instant.now()
.plus(Duration.ofDays(21))
.atZone(ZoneId.of("Africa/Nairobi"));
prints(“Ora dell'Africa orientale”是意大利本地化名称)
09/16/2015 at 09:34:44 PM Ora dell'Africa orientale
您可以获得可用名称的列表,这些名称应该用于存储和检索用户的首选项
Set<String> ids = ZoneId.getAvailableZoneIds();