2011-09-21 36 views
1

例如,我輸入參數的格式爲:「04:00-06:00」或「23:00-24:00」。參數類型 - StringJava。檢查時間範圍。怎麼樣?

而在我的方法中,我必須檢查,輸入參數的時間範圍不在當前時間之前。我如何做到這一點?

更多細節:

輸入時間範圍: 「12:00-15:00

當前時間:16:00

在這種情況下,方法必須返回false

又如:

輸入時間範圍: 「10:30-12:10

當前時間:09:51

方法必須返回true

你能給我一些想法或算法嗎?我如何實現這個方法?

+0

這應該標記爲家庭作業嗎? – Hurda

+1

不,這不是一項家庭作業。你錯了。 – user471011

回答

5

首先,您應該學會使用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.valueOfString轉換而來,將您的Date轉換爲自午夜以來的任何時間段的分鐘數,並使用您喜歡的任何日曆實施,然後使用Range.contains

+0

當前時間是日期但不是字符串。 – user471011

+0

+1表示喬達時間:) – LeChe

+0

我同意你的意見。這是一個很好的解決方案......但我不能使用任何庫。只有標準功能和標準包。 – user471011

1
Date currentDate = new Date(); 
Date maxDate; 
Date minDate; 

//Parse range to two substrings 
//parse two substrings to [HH, MM] 
//for HH && MM parseInt() 
// 
minDate= new Date.SetHour(HH); minDate.SetMinute(MM); 
//repeat for max date 

if(currentDate.Before(maxDate) && currentDate.After(minDate)) 
{ 
return true; 
} 
else 
return false; 
+1

setHours和setMinute是已棄用的方法。 – user471011

+0

我很抱歉,我正在閱讀舊文檔,使用Calendar類中的等效方法。例如maxDate = new Calendar(); maxDate.set(HOUR,11H); currentDate.after(的maxDate); – awiebe