日期时区在查找“美国/蓬塔阿雷纳斯”位置的 ID 时遇到问题
Posted
技术标签:
【中文标题】日期时区在查找“美国/蓬塔阿雷纳斯”位置的 ID 时遇到问题【英文标题】:Date Time Zone is having issue with finding ID for the location "America/Punta_Arenas" 【发布时间】:2019-06-24 17:20:11 【问题描述】:我在尝试获取位置“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 位置的时区吗?任何帮助表示赞赏。
【问题讨论】:
我无法复制。我在 Java 1.8.0_131 上使用 Joda-Time 2.9.9。您的代码创建了一个DateTimeZone
对象,该对象又打印为America/Punta_Arenas
。您使用的是什么版本的 Joda-Time 和什么版本的 Java?也适用于 Java 1.7.0_79。
根据Joda-Time Available Time Zones America/Punta_Arenas 之前不包括在内。 Updating the time zone data 有一个程序。如果是我,我会先尝试更新到最新的 Joda-Time 版本。如果这没有帮助,我会尝试按照程序更新时区数据。
谢谢@OleV.V。我使用的是旧版本 2.8.1,现在我将其更新到 2.9.4 并解决了问题。
【参考方案1】:
乔达时间
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 项目中向后移植到 Java 6 和 7,这是另一个由 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");
希望有帮助
【讨论】:
我使用的是 2.8.1。当我更新到 2.9.4 时问题得到解决。感谢您的快速回复。 没问题,很高兴它有帮助 仅供参考,您还会在主机操作系统、Postgres 等数据库引擎和各种软件库中找到 tzdata。如果您关心的任何时区发生变化,都需要更新。 感谢@BasilBourque 感谢您的意见。以上是关于日期时区在查找“美国/蓬塔阿雷纳斯”位置的 ID 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
在带有/不带时区的日期或时间戳的查询中处理 generate_series()
PHP,Codeigniter:如何在Web应用程序中根据用户时区/位置设置日期/时间?
按时区(BST/GMT、CET/CEST 等)查找下一个夏令时日期
Logstash:如何在日期过滤器模式中匹配时区 ID“CET”?
Java日期时间API系列20-----Jdk8中java.time包中的新的日期时间API类,ZoneId时区ID大全等。