Прежде всего, вы, вероятно, должны просто научиться использовать Время Joda .
Тем не менее, поскольку все времена заполнены нулями, вы можете просто сравнивать строки лексически.
public static boolean inRange(String time, String range) {
return time.compareTo(range.substring(0, 5)) >= 0
&& time.compareTo(range.substring(6)) <= 0;
}
Рекомендуется быстро выходить из строя на искаженных входах.
private static final Pattern VALID_TIME = Pattern.compile("[012][0-9]:[0-5][0-9]");
private static final Pattern VALID_RANGE = Pattern.compile("[012][0-9]:[0-5][0-9]-[012][0-9]:[0-5][0-9]");
, а затем поместите утверждение в верхнюю часть inRange
:
assert VALID_TIME.matcher(time).matches() : time
assert VALID_RANGE.matcher(range).matches() : range
EDIT:
Если вам действительно нужно представить текущее время как Date
, то вы должны сравнить его следующим образом:
public final class Range {
/** Inclusive as minutes since midnight */
public final int start, end;
public Range(int start, int end) {
assert end >= start;
}
/** @param time in minutes since midnight */
public boolean contains(int time) {
return start <= time && time <= end;
}
public static Range valueOf(String s) {
assert VALID_RANGE.matcher(s).matches() : s;
return new Range(minutesInDay(s.substring(0, 5)),
minutesInDay(s.substring(6));
}
private static int minutesInDay(String time) {
return Integer.valueOf(time.substring(0, 2)) * 60
+ Integer.valueOf(time.substring(3));
}
}
Используйте Range.valueOf
для преобразования из String
, конвертируйте Date
в количество минут с полуночи в любом часовом поясе, используя любую календарную реализацию, которая вам нравится, и затем используйте Range.contains
.