2017-07-30 115 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