将 Java.util.Calendar 转换为 org.threeten.bp.LocalDateTime(对于 Android)

Convert Java.util.Calendar to org.threeten.bp.LocalDateTime (for Android)

如何从 Android Java 日期和日历转换为三个 LocalDateTime

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

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

已修复!

您的解决方案不够理想。

LocalDateTime没有zone/offset

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

在处理时间轴上的实际时刻时,请改用 InstantOffsetDateTimeZonedDateTime

我们仅在以下情况下使用 LocalDateTime

  • 我们不知道区域。
  • 我们打算在非同时的时刻使用多个区域(“我们在世界各地的所有工厂都在中午关闭吃午饭”)。
  • 我们正在为未来安排更多的时间,因此我们可能会受到反复无常的政客的打击,他们会在几乎没有通知的情况下重新定义时区,例如夏令时 (DST)。我们使用 LocalDateTime 作为逻辑,并在生成临时日历时作为 ZonedDateTime 呈现给用户。

DateTimeUtils 转化次数

接下来,您的转换数学是不必要的。

DateTimeUtils class 提供转换的实用方法。

ZonedDateTime zdt = DateTimeUtils.toZonedDateTime( myCalendar ) ; 

或者……

Instant instant = DateTimeUtils.toInstant( myCalendar ) ;

P.S。不要在问题的正文中回答您的问题。相反,post 一个实际的答案,然后接受它以关闭问题。

提示:对于那些想要使用 ThreeTen-Backport in Android, see the ThreeTenABP project. And see .

的人