@Dmtm
Android

Почему ZoneId отличается от системных настроек телефона?

Эмулятор, API 27 (android 8), но от эмулятора не зависит, на А9 также
655448d61c69a238914469.jpeg
используется org.threeten.bp
но ZoneId.systemDefault().id выдает America/Sao_Paulo, это -3 часа, а по настройкам -2
причем
val dst = ZoneId.systemDefault().rules.getDaylightSavings(Instant.now())
        val isUseDst = ZoneId.systemDefault().rules.isDaylightSavings(Instant.now())
        Timber.d("dst: ${dst.toHours()}")
        Timber.d("isUseDst: $isUseDst")

выдает
dst: 0
isUseDst: false
Это явно проблема с переходом на летнее время, но как получить правильное время?

еще логи
val zoneUtc = ZoneId.of("UTC")
        val zonedDateTime = ZonedDateTime.of(dateTimeUTC, zoneUtc)

        val localZone = ZoneId.systemDefault()
        val localZonedDateTime: ZonedDateTime = zonedDateTime.withZoneSameInstant(localZone)

        Timber.d("toLocalDateTime, zonedDateTimeUtc: $zonedDateTime")
        Timber.d("toLocalDateTime, $localZonedDateTime")


toLocalDateTime, zonedDateTimeUtc: 2023-11-13T10:09:13Z[UTC]
toLocalDateTime, 2023-11-13T07:09:13-03:00[America/Sao_Paulo]
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Dmtm Автор вопроса
Android
вобщем понятно что org.threeten.bp берет данные по смещениям и дневному времени из своих ресурсов,
а андроид из уровня своей java-машины
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы