java.time и ThreeTenABP
final LocalTime rangeBegin = LocalTime.of(6, 0);
final LocalTime rangeEnd = LocalTime.of(8, 30);
LocalTime currentTime = LocalTime.now(ZoneId.of("America/Bogota"));
boolean inClosedRange = ! (currentTime.isBefore(rangeBegin) || currentTime.isAfter(rangeEnd));
Если вы предпочитаете доверять настройке часового пояса устройства, а не жестко заданному (или настроенному) часовому поясу, используйте LocalTime.now(ZoneId.systemDefault())
.
Поскольку LocalTime
не имеет ни метода isBeforeOrEqual
, ни isEqualOrAfter
, я ставлю условие отрицательно: если текущее время не является ни строго до, ни строго после диапазона, оно должно быть в нем.Некоторые предпочтут более длинный, но также и более прямой:
boolean inClosedRange = currentTime.equals(rangeBegin)
|| (currentTime.isAfter(rangeBegin) && currentTime.isBefore(rangeEnd))
|| currentTime.equals(rangeEnd);
Вы заметите, насколько все еще проще, чем ваш код, использующий SimpleDateFormat
и Date
.Я лично также нахожу это более ясным.Я использую и рекомендую java.time, современный API даты и времени Java.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых иновые устройства Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки