如何从Android Java日期和日历转换为三个LocalDateTime
Calendar calTime = Calendar.getInstance();
Date date = calTime.getTime();
LocalDateTime ldt = Instant.ofEpochSecond(date.getTime()/1000)
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
固定!
答案 0 :(得分:2)
您的解决方案不是最佳选择。
LocalDateTime
没有区域/偏移量首先,您对LocalDateTime
的使用几乎肯定不合适。您正在丢弃有关时区或偏移的有价值信息。 LocalDateTime
类故意没有时区概念或从UTC偏移,因此不代表实际时刻,只是对26-范围内可能时刻的粗略概念27个小时左右。
在处理时间轴上的实际时刻时,请使用Instant
,OffsetDateTime
和ZonedDateTime
。
我们只在以下情况下使用LocalDateTime
:
LocalDateTime
作为逻辑,并在生成临时日历时以ZonedDateTime
形式呈现给用户。DateTimeUtils
接下来,你的转换数学是不必要的。
DateTimeUtils
类提供转换的实用程序方法。
ZonedDateTime zdt = DateTimeUtils.toZonedDateTime( myCalendar ) ;
...或
Instant instant = DateTimeUtils.toInstant( myCalendar ) ;
P.S。请勿在问题正文中回答您的问题。相反,发布一个实际的答案,然后接受它来关闭问题。
提示:对于那些想在Android中使用ThreeTen-Backport的人,请参阅ThreeTenABP项目。请参阅How to use ThreeTenABP in Android Project。