Час находится между часовым диапазоном? - PullRequest
0 голосов
/ 02 июня 2019

Ближайший пост, который я нашел на мой вопрос: Как сравнить текущее время с временным диапазоном? Но это не работает для меня, потому что мне нужно знать, находится ли текущее время на устройстве пользователя между временной диапазон

так что я получил текущее время, как это ...

DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss a");
    String horaString = dateFormat.format(hour);
    Log.i("ALO","HORAAAAAASSSSTRRRRIIIINNNNGGG---->"+horaString);

    first = horaString.charAt(11);
    Log.i("ALOP","Char at 11 ---->"+first);
    char second=horaString.charAt(12);
    Log.i("ALOP","Char at 12 ---->"+second);
    char third=horaString.charAt(13);
    char fourth=horaString.charAt(14);
    char fith=horaString.charAt(15);


    StringBuilder sb = new StringBuilder();
    sb.append(first);
    sb.append(second);
    sb.append(third);
    sb.append(fourth);
    sb.append(fith);

    String currentTime = sb.toString();

Теперь, что нужно сделать, это

6:00>=currentTime<=8:30 //Can i still do the comparison with AM/PM?

Так что это то, что мне нужно сделать, если currentTime = 8:29 метод, который дает мне знать, True с логическим значением.

Ответы [ 2 ]

1 голос
/ 02 июня 2019

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 с подпакетами.

Ссылки

0 голосов
/ 02 июня 2019

Есть две полезные команды: После , До .Вот пример того, как вы можете их использовать:

SimpleDateFormat dateFormat = new SimpleDateFormat ("ЧЧ: мм");

Date fromTime = dateFormat.parse("6:00");
Date toTime = dateFormat.parse("8:30");
Date currentTime = dateFormat.parse(dateFormat.format(new Date()));

if(currentTime.after(fromTime) && currentTime.before(toTime)) {
    // To do
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...