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

时间:2019-01-31 09:30:28

标签: java date timezone jodatime google-location-services

我在尝试获取位置“ 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

有什么方法可以获取位置美国/蓬塔阿雷纳斯的时区?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

Joda-Time

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 的许多功能在 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");

希望有帮助