我在 Android 应用程序中遇到时区问题 (minSdkVersion = 26)。我从服务器收到时区列表,其中包括“欧洲/基辅”。但是,当我尝试使用
ZoneId.of("Europe/Kyiv")
将其转换为 ZoneId 时,出现以下错误:
java.time.zone.ZoneRulesException: Unknown time-zone ID: Europe/Kyiv
我在网上看到基辅的 IANA 时区标识符已于 2022 年末从“欧洲/基辅”更新为“欧洲/基辅”。
我的问题是,我需要对我的项目进行哪些具体更新才能成功使用
ZoneId.of("Europe/Kyiv")
?
我将minSdk更新到26,但没有帮助。 另外,我尝试将 Gradle JDK 更新到 18+,但不起作用。
时区更新由 Google 或设备的 OEM/ODM 完成。
Android 开源项目有有关更新时区文件的文档:
https://source.android.com/docs/core/permissions/timezone-rules
根据评论线程,模拟器似乎没有使用任何最新的
tzdata
信息进行更新,因此模拟器 Android 操作系统很可能是特定版本发布时 AOSP 的快照。
如果您需要更新
tzdata
,也许在不再受支持的旧设备上,您将需要使用第三方库。根据这个问题更新Android tzdata文件中的评论,库:https://github.com/dlew/joda-time-android可以满足获取tzdata
更改的需求,但需要更新库和您的应用程序根据需要,即以一定的频率。