Java 使用DateTimeFormatter显示短时区名称
我有以下Java 使用DateTimeFormatter显示短时区名称,java,java-8,java-time,Java,Java 8,Java Time,我有以下DateTimeFormatter DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a zzzz"); 我正在使用它格式化一个ZoneDateTime,如下所示: ZonedDateTime disableTime = Instant.now() .plus(Duration.ofDays(21)) .at
DateTimeFormatter
DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a zzzz");
我正在使用它格式化一个ZoneDateTime
,如下所示:
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日美国东部时间下午1:15:45
但获得输出的是:
2015年9月16日下午1:15:45 UTC-05:00
无论我在模式中使用z
,zz
,zzz
,还是zzzz
,它总是以上述格式输出
是否有一种不同的方法来创建ZoneDateTime
,以提供所需的输出,或者我是否在模式中做了一些错误的事情
根据
DateTimeFormatter
,O
应用于显示本地化的时区偏移量,如UTC-05:00
,而z
应用于显示时区名称,如东部夏时制
,或EDT
这是因为您使用了匿名的UTC偏移量。尝试使用命名的区域ID
ZonedDateTime disableTime = Instant.now()
.plus(Duration.ofDays(21))
.atZone(ZoneId.of("Africa/Nairobi"));
印刷品(“Ora dell'Africa orientale”是意大利语本地化名称)
您可以获得可用名称的列表,这些名称应用于存储和检索用户的首选项
Set<String> ids = ZoneId.getAvailableZoneIds();
Set id=ZoneId.getAvailableZoneId();
我使用了(“美国/纽约”)分区,它给了我想要的结果。非常感谢。java.time包没有识别出时间偏移的分区(“UTC”,时间偏移的分区(-5))相当于时间偏移的分区(“美国/纽约”)有什么原因吗?或者它们不相等?啊,没关系。这是因为ZoneId.of offset(“UTC”,ZoneOffset.of Hours(-5))
将始终有UTC-05:00偏移,而ZoneId.of(“America/New__York)
将根据夏令时在UTC-05:00和UTC-04:00之间交替。因此它们并不相等。现在有意义。当然。此外,0、1或N个命名区域使用一个偏移
Set<String> ids = ZoneId.getAvailableZoneIds();