Я уверен, что это было сделано 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");
}
То, что я ищу, является кодом, который лучше
Что я не ищу
это все вам нужно это сделать, этот метод слабо связан с вводом и очень согласован.
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");
}
}
Теперь вы можете сделать два вызова методов с хорошо названными именами, которые будут довольно самодокументированными.