2017-09-17 94 views
-3

如何从Android的Java的日期和日历转换为threeten LocalDateTime转换java.util.Calendar来org.threeten.bp.LocalDateTime(Android版)

Calendar calTime = Calendar.getInstance(); 
Date date = calTime.getTime(); 

LocalDateTime ldt = Instant.ofEpochSecond(date.getTime()/1000) 
    .atZone(ZoneId.systemDefault()) 
    .toLocalDateTime(); 

固定!

+2

你的编辑是否回答这个问题?如果是这样,把它作为一个实际的答案 –

回答

2

您的解决方案不够理想。

LocalDateTime没有区/偏移

首先,你的LocalDateTime使用是不合适的几乎可以肯定。您将丢弃有关时区或偏移量的有价值信息。 LocalDateTime类故意没有时区或从UTC偏移的概念,因此而不是代表的是一个实际的时刻,只是关于在26-27小时左右范围内的可能时刻的粗略想法。

而是在处理时间线上的实际时刻时使用Instant,OffsetDateTimeZonedDateTime

我们只用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