我在尝试获取位置“ 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
有什么方法可以获取位置美国/蓬塔阿雷纳斯的时区?任何帮助表示赞赏。
答案 0 :(得分:4)
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>
Joda-Time项目现在处于维护模式。它的创建者Stephen Colebourne继续领导JSR 310及其实现 java.time (在Java 8及更高版本中找到)。这是Joda-Time的正式继任者。
在Java的java.time
包中,您将找到 ZoneId.of 。
ZoneId zoneId = ZoneId.of("America/Punta_Arenas");
java.time 的许多功能在 ThreeTen-Backport 项目(由Stephen Colebourne领导的另一个项目)中反向移植到Java 6和7。
在那里您将找到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");
希望有帮助