日期时区在查找位置的 ID 时遇到问题 "America/Punta_Arenas"

Date Time Zone is having issue with finding ID for the location "America/Punta_Arenas"

我在尝试获取位置 "America/Punta_Arenas" 的时区时遇到异常。我正在使用 joda LocalDateTime。

import org.joda.time.{DateTime, DateTimeZone}
val timezone = DateTimeZone.forID("America/Punta_Arenas")

所以上面的语句抛出了下面的异常

java.lang.IllegalArgumentException: The datetime zone id 'America/Punta_Arenas' is not recognised

有什么方法可以获取位置 America/Punta_Arenas 的时区?感谢您的帮助。

乔达时间

Joda-Time 带有自己的时区数据副本,称为 tzdata。时区定义更改,因此此文件可能需要更新。

您没有提到您使用的是哪个版本的 Joda-Time,如果可能,请先升级到最新版本,这样应该可以:

<!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.1</version>
</dependency> 

java.time

Joda-Time 项目现在处于维护模式。它的创建者 Stephen Colebourne 继续领导 JSR 310 及其实现,java.time,见于 Java 8 及更高版本。这是 Joda-Time 的官方继承者。

在 Java 的 java.time 包中你会发现 ZoneId.of.

ZoneId zoneId = ZoneId.of("America/Punta_Arenas");

ThreeTen-Backport

许多 java.time 功能被反向移植到 Java 6 & 7 在 ThreeTen-Backport 项目,另一个由 Stephen Colebourne 领导的项目。

在那里你会找到 org.threeten.bp.ZoneId class.

<!-- https://mvnrepository.com/artifact/org.threeten/threetenbp -->
<dependency>
    <groupId>org.threeten</groupId>
    <artifactId>threetenbp</artifactId>
    <version>1.3.8</version>
</dependency>

代码将与上面相同,但导入不同:

import org.threeten.bp.ZoneId;
ZoneId zoneId = ZoneId.of("America/Punta_Arenas");

希望对您有所帮助