2017-07-30 88 views
-1

我有兩個字符串變量「time1」&「time2」。基本上,每個字符串變量本身就是一個時間範圍。 「時間1」介於「時間2」之間「時間2」介於「時間1」之間。打印「不可用」。如何比較Android中的兩個時間範圍?

實施例例1:

String time1 = "14:00 - 16:00" 

String time2 = "15:00 - 16:00" 

打印 「不可用」

事例2:

String time1 = "14:00 - 17:00" 

String time2 = "15:00 - 16:00" 

打印 「不可用」

事例3:

String time1 = "15:00 - 16:00" 

String time2 = "14:00 - 17:00" 

打印 「不可用」

事例4:

String time1 = "15:00 - 16:00" 

String time2 = "14:00 - 16:00" 

打印 「不可用」

事例5:

String time1 = "14:00 - 15:00" 

String time2 = "15:00 - 16:00" 

打印 「可用」

可能有多個類似案例。 實際上,「時間2」是指「在此期間已經由另一用戶預訂了時隙」,並且「時間1」指的是「在此期間新用戶請求時隙」 P.S:使用預訂系統。

回答

2

首先,你解析字符串找到startTimeendTime,爲他們每個人。

由於這些是簡單的hour:minute,你可以簡單地計算這些爲每日分鐘,即hour * 60 + minute

解析開始和結束時間的簡單方法是使用正則表達式。

public final class TimeRange { 
    private final int startMinOfDay; 
    private final int endMinOfDay; 

    public TimeRange(String text) { 
     Pattern p = Pattern.compile("(\\d{1,2}):(\\d{2}) - (\\d{1,2}):(\\d{2})"); 
     Matcher m = p.matcher(text); 
     if (! m.matches()) 
      throw new IllegalArgumentException("Invalid time range: " + text); 
     this.startMinOfDay = minOfDay(m.group(1), m.group(2)); 
     this.endMinOfDay = minOfDay(m.group(3), m.group(4)); 
     if (this.endMinOfDay <= this.startMinOfDay) 
      throw new IllegalArgumentException("Invalid time range: " + text); 
    } 
    private static int minOfDay(String hour, String minute) { 
     int h = Integer.parseInt(hour); 
     int m = Integer.parseInt(minute); 
     if (m >= 60 || h >= 24) 
      throw new IllegalArgumentException("Invalid time: " + hour + ":" + minute); 
     return h * 60 + m; 
    } 
    public boolean overlaps(TimeRange that) { 
     return (this.startMinOfDay < that.endMinOfDay && this.endMinOfDay > that.startMinOfDay); 
    } 
} 

測試

public static void main(String[] args) { 
    test("14:00 - 16:00", "15:00 - 16:00"); 
    test("14:00 - 17:00", "15:00 - 16:00"); 
    test("15:00 - 16:00", "14:00 - 17:00"); 
    test("14:00 - 15:00", "15:00 - 16:00"); 
} 
private static void test(String time1, String time2) { 
    System.out.println(new TimeRange(time1).overlaps(new TimeRange(time2)) ? "Not Available" : "Available"); 
} 

輸出

Not Available 
Not Available 
Not Available 
Available 
+0

感謝的人!有效 :-) – anashamidkh