-2

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

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

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

固定的!

4

1 回答 1

3

您的解决方案不是最佳的。

LocalDateTime没有区域/偏移量

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

而是在处理时间线上的实际时刻时使用Instant,OffsetDateTime和。ZonedDateTime

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

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

DateTimeUtils用于转换

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

该类DateTimeUtils提供了用于转换的实用方法。

ZonedDateTime zdt = DateTimeUtils.toZonedDateTime( myCalendar ) ; 

或者……</p>

Instant instant = DateTimeUtils.toInstant( myCalendar ) ;

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

提示:对于那些想在 Android中使用ThreeTen-Backport 的人,请参阅ThreeTenABP项目。并查看如何在 Android 项目中使用 ThreeTenABP

于 2017-09-18T04:23:20.903 回答