我在尝试获取位置"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时间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项目现在处于维护模式。它的创建者StephenColebourne继续领导JSR310及其在Java8及更高版本中发现的java.time实现。这是Joda Time的官方继任者。
在Java的java.time
包中,您可以找到.的ZoneId
ZoneId zoneId = ZoneId.of("America/Punta_Arenas");
ThreeTen背包
java.time的大部分功能都是向后移植到Java6&7在ThreeTen背包项目中,另一个由Stephen Colebourne领导的项目。
在那里你可以找到org.threeten.bp.ZoneId
类。
<!-- 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");
希望能帮助