Странное поведение OffsetDateTime.now () в Android - PullRequest
0 голосов
/ 01 апреля 2020

Если я в общей программе Java:

OffsetDateTime offsetDateTime = OffsetDateTime.now();

, тогда у меня будет вывод 2020-04-01T20: 22: 04.604 + 02: 00 .

Если я сделаю то же самое для Android, тогда у меня будет вывод 2020-04-01T18: 22: 04.604Z .

Также с форматированием в local_time:

String format = DateTimeFormatter.ISO_LOCAL_TIME.format(now);

вывод 18: 22: 04.604

Но теперь я хочу () мой локальный DateTime 20.22 , а не UT C время.

Часовой пояс системы в Android соответствует европейскому летнему времени +02: 00.

Что здесь происходит?

1 Ответ

0 голосов
/ 04 апреля 2020

Самый безопасный способ - передать нужный часовой пояс методу now:

    OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Vienna"));
    System.out.println(offsetDateTime);

Выходные данные, которые я запускал только сейчас:

2020-04 -04T09: 02: 05.059927 + 02: 00

Предоставление часового пояса явно освобождает нас от использования часового пояса JVM по умолчанию.

Если я правильно понимаю ваш вопрос, Настройка часового пояса JVM не отражает настройки часового пояса вашего устройства. Возможно, что они будут разными, но как это произошло в вашем случае, я не могу сказать. Возможные объяснения включают в себя:

  • Ваша JVM была запущена с настройкой user.timeaone, равной UT C.
  • Некоторое место в вашей программе или другая программа, работающая в той же JVM часовой пояс устанавливается в UT C, либо путем установки вышеупомянутого системного свойства, либо путем вызова TimeZone.setDefault().
...