you*_*786 5 timezone android jodatime
我在我的应用程序中使用JodaTime,并且我从开发人员控制台获得有关此类崩溃的报告:
java.lang.RuntimeException: Unable to resume activity {com.myapp.app/Home}: java.lang.IllegalArgumentException: The datetime zone id 'Africa/Abuja' is not recognised
....
Caused by: java.lang.IllegalArgumentException: The datetime zone id 'Africa/Abuja' is not recognised
at org.joda.time.DateTimeZone.forTimeZone(DateTimeZone.java:337)
...
Run Code Online (Sandbox Code Playgroud)
我正在使用这行代码来获取时区:
DateTimeZone tz = DateTimeZone.forTimeZone(TimeZone.getDefault());
Run Code Online (Sandbox Code Playgroud)
有趣的是,大多数崩溃都是Africa/****.
TimeZone.getDefault() 是Android API的一部分,所以我假设它会返回可用的时区ID.
我能用这些时区做些什么来正确使用它们吗?这是Android和Joda Time的已知问题吗?
使用适用于Android的这个Joda版本:https://github.com/dlew/joda-time-android
然后,运行JodaTimeAndroid.init(this);你的应用程序onCreate(它在他们的文档中),并且瞧,它只是有效,所有时区都被识别.
在使用 Olson 标识符(以发明家 Arthur David Olson 命名)的 IANA-tz 数据库中,区域“非洲/阿布贾”不是有效的时区标识符。相反,在本例中,有效区域标识符是“非洲/拉各斯”。
您还应该注意,JodaTime 遵循 IANA(也查找那里最新的版本),并且 Android 有一个不同的本地 tz 数据库,该数据库可能使用不同的时区标识符。根据这个android-api-link Android 支持 Olson-tz-identifiers。我不太清楚你为什么使用“非洲/阿布贾”。为什么这是有效的。它包含在吗TimeZone.getAvailableIDs()?
如果 Android 配置中有任何奇怪的情况导致TimeZone.getDefault()使用“非洲/阿布贾”,那么您可以尝试将系统属性“user.timezone”设置为“非洲/拉各斯”。JodaTime首先会看看这个属性。