Конвертировать Java.util.Calendar в org.threeten.bp.LocalDateTime (для Android)

Как конфертировать из Android Java Date and Calendar в тройку LocalDateTime

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

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

Исправлена!

1 ответ

Решение

Ваше решение не оптимально.

LocalDateTime не имеет зоны / смещения

Во-первых, ваше использование LocalDateTime неуместно почти наверняка. Вы отбрасываете ценную информацию о часовом поясе или смещении. LocalDateTime класс преднамеренно не имеет понятия о часовом поясе или смещении от UTC и поэтому не представляет фактический момент, а лишь приблизительное представление о возможных моментах в диапазоне от 26 до 27 часов или около того.

Вместо этого используйте Instant, OffsetDateTime, а также ZonedDateTime когда речь идет о реальных моментах на временной шкале.

Мы используем только LocalDateTime когда:

  • Мы не знаем зону.
  • Мы намерены создать несколько зон в одно и то же время ("все наши заводы по всему миру закрываются в полдень на обед").
  • Мы планируем на будущее больше, чем на несколько недель, и поэтому мы можем получить удар от капризных политиков, переоценивающих часовой пояс, таких как летнее время (DST), с небольшим уведомлением. Мы используем LocalDateTime для логики, и представить пользователю как ZonedDateTime при создании переходного календаря.

DateTimeUtils для конверсий

Далее, ваша математика преобразования не нужна.

DateTimeUtils Класс предоставляет служебные методы для преобразований.

ZonedDateTime zdt = DateTimeUtils.toZonedDateTime( myCalendar ) ; 

или же…

Instant instant = DateTimeUtils.toInstant( myCalendar ) ;

PS Не отвечайте на свой вопрос внутри основного текста вопроса. Вместо этого опубликуйте фактический ответ, а затем примите его, чтобы закрыть вопрос.

Советы: Для тех, кто хочет использовать ThreeTen-Backport в Android, см. Проект ThreeTenABP. И посмотрите, как использовать ThreeTenABP в Android Project.

Другие вопросы по тегам