将 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 小时左右的范围内的时刻。
在处理时间轴上的实际时刻时,请改用 Instant
、OffsetDateTime
和 ZonedDateTime
。
我们仅在以下情况下使用 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 .
的人
如何从 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 小时左右的范围内的时刻。
在处理时间轴上的实际时刻时,请改用 Instant
、OffsetDateTime
和 ZonedDateTime
。
我们仅在以下情况下使用 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