您的解决方案不够理想。
LocalDateTime
没有区/偏移
首先,你的LocalDateTime
使用是不合适的几乎可以肯定。您将丢弃有关时区或偏移量的有价值信息。 LocalDateTime
类故意没有时区或从UTC偏移的概念,因此而不是代表的是一个实际的时刻,只是关于在26-27小时左右范围内的可能时刻的粗略想法。
而是在处理时间线上的实际时刻时使用Instant
,OffsetDateTime
和ZonedDateTime
。
我们只用LocalDateTime
时:
- 我们不知道的区域。
- 我们打算在一个非同时刻的多个区域(“我们所有的世界各地的工厂在中午关闭,午餐时间”)。
- 我们正在安排未来的几个星期,所以我们可能会遇到反复无常的政治家重新定义时区,如夏令时(DST),几乎没有通知。我们使用
LocalDateTime
作为逻辑,并在生成瞬态日历时作为ZonedDateTime
呈现给用户。
DateTimeUtils
的转换
接下来,您的转换数学是不必要的。
DateTimeUtils
类提供转换的实用方法。
ZonedDateTime zdt = DateTimeUtils.toZonedDateTime(myCalendar) ;
或...
Instant instant = DateTimeUtils.toInstant(myCalendar) ;
附:不要在问题的正文中回答你的问题。相反,发布一个实际的答案,然后接受它来关闭该问题。
提示:对于那些想在Android中使用ThreeTen-Backport的人,请参阅ThreeTenABP项目。并参见How to use ThreeTenABP in Android Project。
你的编辑是否回答这个问题?如果是这样,把它作为一个实际的答案 –