【发布时间】:2016-05-27 11:49:38
【问题描述】:
我在 AndroidTV 的应用中使用ThreeTen Android Backport。
虽然在 Nexus Player 和所有经过测试的 Amazon Fire TV 设备上一切正常,但在 Sony Bravia 4K 2015 (KD-55x8509C) 上调用 LocalDateTime.now() 时始终会导致应用程序崩溃。
Caused by: org.threeten.bp.DateTimeException: Invalid ID for ZoneOffset, invalid format: -01:00GMT-02:00,J086/02:00,J176/02:00
at org.threeten.bp.ZoneOffset.of(ZoneOffset.java:221)
at org.threeten.bp.ZoneId.of(ZoneId.java:344)
at org.threeten.bp.ZoneId.of(ZoneId.java:285)
at org.threeten.bp.ZoneId.systemDefault(ZoneId.java:244)
at org.threeten.bp.Clock.systemDefaultZone(Clock.java:137)
at org.threeten.bp.LocalDateTime.now(LocalDateTime.java:152)
发生了什么,我能做些什么?
【问题讨论】:
-
真的 - 否决票?需要解释一下吗?
-
我不是反对者,但很明显,zone id 被破坏了,threeten-abp 只能处理/理解有效的 zone id,Java-8 也是如此。也许反对者认为这太清楚了,“不可避免”。无论如何,为了稳定我的库Time4A,我已经考虑到了这种奇怪的区域ID 的可能性。这个库将在这种特殊情况下包装 Android 平台的系统时区(围绕
java.util.TimeZone进行包装),并且 - 这样 - 当此类区域 ID 映射到内部 tzdb 区域存储库不再可能时,防止中止。跨度> -
@MenoHochschild:感谢您的评论!是的,也许我的问题听起来比我的意思更天真——当然,我阅读并理解了堆栈跟踪。但我认为问题已明确定义,并且要求合理的解决方法并不超出 SO 的范围。无论如何,感谢指向您的时间库的指针,我不知道。由于我在 Android 上存在时间库的特定问题(请参阅此处:github.com/JakeWharton/ThreeTenABP)我有点担心切换......但也许我可以使用你的示例并将我的调用包装到
now()并进行一些错误更正.
标签: android sony android-tv threetenbp