java.time и ThreeTenABP
Не смешивайтесь с необработанными смещениями.Ява знает смещение для Берлина лучше, чем вы.И не используйте Calendar
.Этот класс имеет ряд проблем с дизайном и считается устаревшим.
ZonedDateTime zdtBerlin = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
System.out.println("Zeit in Berlin: " + zdtBerlin);
Когда я только что запустил этот фрагмент, я получил такой вывод:
Zeit в Берлине: 2019-02-08T19: 23: 00.275 + 01: 00 [Европа / Берлин]
Как видно из названия, ZonedDateTime
имеет часовой пояс.В данном случае Европа / Берлин.Это современная замена для GregorianCalendar
(наиболее распространенный конкретный подкласс абстрактного класса Calendar
).
Вопрос: Можно ли использовать java.time на Android?
Да, java.время работает хорошо на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортировали классы даты и времени из
org.threeten.bp
с подпакетами.
Что пошло не так в вашем коде?
Фрагмент 1-: вы устанавливаете Calendar
пора в час в будущее.Вы не устанавливаете часовой пояс.
Фрагмент 2-: Первый SimpleTimeZone
не имеет конструктора без аргументов, поэтому new SimpleTimeZone()
не будет работать.Затем его setRawOffset
ожидает смещение в миллисекундах.Если rawOffset
равно 1, вы устанавливаете смещение в 1 миллисекунду.
Ссылки