java.time
ZonedDateTime nowInUk = ZonedDateTime.now(ZoneId.of("Europe/London"));
int hour = nowInUk.getHour();
int minutes = nowInUk.getMinute();
int seconds = nowInUk.getSecond();
int day = nowInUk.getDayOfMonth();
Month month = nowInUk.getMonth();
int year = nowInUk.getYear();
System.out.println("hour = " + hour + ", minutes = " + minutes + ", seconds = " + seconds
+ ", day = " + day + ", month = " + month + ", year = " + year);
Когда я только что запустил этот фрагмент, он напечатал:
час = 3, минуты = 41, секунды = 15, день = 5, month = OCTOBER, year = 2018
ZonedDateTime
в значительной степени заменяет устаревший Calendar
класс.
Что пошло не так в вашем коде?
Часовой поясИдентификационный номер для Великобритании: Europe/London
.В вашем коде вы использовали UTC
, что является чем-то другим и даст вам другой результат, по крайней мере иногда.Британское время совпадает с UTC в течение года в некоторые годы, но не в это время года в этом году.Таким образом, у вас есть время, которое было на час раньше, чем британское время.
Кроме того, c1.get(Calendar.HOUR)
дает вам час в AM или PM с 1 до 12, что, я думаю, не было тем, что вы хотели.
Вопрос: Можно ли использовать java.time
на Android?
Да, java.time
прекрасно работает на устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на новых устройствах Android (от уровня API 26, как мне сказали), новый API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где впервые был описан современный API).
- На (более старом) Android, используйте Android-версию ThreeTen Backport.Это называется ThreeTenABP.Убедитесь, что вы импортируете классы даты и времени из пакета
org.threeten.bp
и подпакетов.
Ссылки