Посмотрите, находится ли текущее время в пределах определенного диапазона времени в текущий день в Java

Я уверен, что это было сделано 1000 раз в 1 000 различных мест. Вопрос, я хочу знать, существует ли лучший/стандартный/быстрее способ проверить, ли текущее "время" между двумя поданными временными стоимостями hh:mm:ss формат. Например, моя логика большого бизнеса не должна работать между 18:00:00 and 18:30:00. Таким образом, вот то, что я имел в виду:

 public static  boolean isCurrentTimeBetween(String starthhmmss, String endhhmmss) throws ParseException{
  DateFormat hhmmssFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss");
  Date now = new Date();
  String yyyMMdd = hhmmssFormat.format(now).substring(0, 8);

  return(hhmmssFormat.parse(yyyMMdd+starthhmmss).before(now) &&
    hhmmssFormat.parse(yyyMMdd+endhhmmss).after(now));
 }

Тестовый сценарий в качестве примера:

  String doNotRunBetween="18:00:00,18:30:00";//read from props file
  String[] hhmmss = downTime.split(",");
  if(isCurrentTimeBetween(hhmmss[0], hhmmss[1])){
   System.out.println("NOT OK TO RUN");
  }else{
   System.out.println("OK TO RUN");
  }

То, что я ищу, является кодом, который лучше

  • в производительности
  • во взглядах
  • в правильности

Что я не ищу

  • сторонние библиотеки
  • Дебаты обработки исключений
  • переменные соглашения о присвоении имен
  • проблемы модификатора метода
10
задан ring bearer 18 March 2010 в 21:49
поделиться

1 ответ

это все вам нужно это сделать, этот метод слабо связан с вводом и очень согласован.

boolean isNowBetweenDateTime(final Date s, final Date e)
{
    final Date now = new Date();
    return now.after(s) && now.before(e);
}

способ получения объектов Date для начала и конца не имеет отношения к их сравнению. Вы усложняете задачу, передавая представления String .

Вот лучший способ получить даты начала и окончания, опять же слабо связанный и очень согласованный.

private Date dateFromHourMinSec(final String hhmmss)
{
    if (hhmmss.matches("^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$"))
    {
        final String[] hms = hhmmss.split(":");
        final GregorianCalendar gc = new GregorianCalendar();
        gc.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hms[0]));
        gc.set(Calendar.MINUTE, Integer.parseInt(hms[1]));
        gc.set(Calendar.SECOND, Integer.parseInt(hms[2]));
        gc.set(Calendar.MILLISECOND, 0);
        return gc.getTime();
    }
    else
    {
        throw new IllegalArgumentException(hhmmss + " is not a valid time, expecting HH:MM:SS format");
    }
}

Теперь вы можете сделать два вызова методов с хорошо названными именами, которые будут довольно самодокументированными.

20
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: