java.time и ThreeTenABP
String start = "07:00:00";
String end = "17:00:00";
LocalTime startTime = LocalTime.parse(start);
LocalTime endTime = LocalTime.parse(end);
LocalTime now = LocalTime.now(ZoneId.of("Europe/Rome"));
boolean isBetween = ! now.isBefore(startTime) && now.isBefore(endTime);
int a = isBetween ? 1 : 0;
System.out.println("Is between? " + isBetween + "; a = " + a);
Когда я запускал его сейчас (17:15 в Риме), я получил 0, как ты, что и ожидается. Если я укажу часовой пояс, в котором еще нет 5 вечера, я получу:
Между? правда; а = 1
Так что вам нужно выбрать правильный часовой пояс для кода. Если вы доверяете часовому поясу устройства, вы можете использовать ZoneId.systemDefault()
.
В моем логическом выражении я использую «не до» для обозначения «равно или после».
Я использую тот факт, что ваши временные строки имеют формат ISO 8601, формат, который LocalTime
и другие классы java.time анализируют (и также печатают) как значения по умолчанию. Поэтому нам не нужен явный форматер для разбора.
Классы даты и времени, которые вы пытались использовать, Date
и Calendar
, давно устарели и плохо разработаны. Также целочисленные значения 70 000 и 170 000 на самом деле не имеют смысла в качестве представления вашего времени начала и окончания. Вместо этого я использую LocalTime
из java.time, современного Java-API даты и времени. Это время суток без даты и без смещения UTC, поэтому, похоже, это именно то, что вам нужно здесь.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях, а также на новых устройствах Android (начиная с уровня API 26) встроен современный API.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки