2017-07-30 9 views
-1

私は2つの文字列変数 "time1" & "time2"を持っています。基本的に、各文字列変数自体は時間範囲です。 "time1"は "time2"の間にありますまたは "time2"は "time1"の間にあります。印刷できません。Androidで2つの時間範囲を比較するにはどうすればよいですか?

例ケース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" 

印刷

このように複数の例がある可能性があります。 実際には、「time2」は「この時間に他のユーザーによってスロットが既に予約されている」を意味し、「time1」は「この時間に新しいユーザーがスロットを要求していること」を指します。 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

関連する問題