首先,您應該學會使用Joda time。
也就是說,由於時間都是零填充,所以您可以在詞彙上比較字符串。
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
編輯:
如果你真的需要來表示當前時間爲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
。
這應該標記爲家庭作業嗎? – Hurda
不,這不是一項家庭作業。你錯了。 – user471011