0

如何检查给定时间集是否可用于 java 中已预订的时间。我将时间以“ yyyy-MM-dd hh:mm:ss ”格式存储在来自 json 响应的数组列表中。 例如,预订了以下时间的门票,并且新客户在该时间申请门票,我如何从已预订的时间检查门票的可用性。

样票已预订时间:

time set 1
        start time  "2013-11-11 08:10:00";
        end time    "2013-11-11 10:03:00";
time set 2          
        start time  "2013-11-11 14:11:00";
        end time    "2013-11-11 16:10:00";

time set 3      
        start time  "2013-11-11 11:00:00";
        end time    "2013-11-11 12:10:00";

time set 4          
        start time  "2013-11-11 19:00:00";
        end time    "2013-11-11 23:30:00";

场景1:

以下时间(可用时间)的新客户请求票:

    start time  "2013-11-11 10:04:00";
    end time    "2013-11-11 10:59:00";

这个时间设置是可用的,因为没有时间被预订在特定的时间。

方案 2:

以下时间(不可用时间)的新客户请求票:

    start time  "2013-11-11 09:55:00";
    end time    "2013-11-11 10:59:00";

此时间设置不可用,因为09:55:00已在时间设置 1中预订

设想 :

以下时间(不可用时间)的新客户请求票:

    start time  "2013-11-11 10:20:00"
    end time    "2013-11-11 11:20:00"

此时间设置不可用,因为11:20:00已在时间设置 3中预订

我使用以下方法将 json 结果存储在数组列表中:

    DateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    ArrayList<Date> dealStart = new ArrayList<Date>();
    ArrayList<Date> dealEnd = new ArrayList<Date>();

    dealStart.add(formate.parse(jsonObject.getString("booked_start_time"));
    dealEnd.add(formate.parse(jsonObject.getString("booked_end_time"));

请帮我解决java /android中的逻辑问题。

4

2 回答 2

0

可能有更直接的方法可以在没有新数据结构的情况下做到这一点,但间隔树用于实现您的目标。

在计算机科学中,区间树是用于保存区间的有序树数据结构。具体来说,它允许人们有效地找到与任何给定区间或点重叠的所有区间。

是间隔树的 Java 实现。

于 2013-11-12T19:16:24.107 回答
0

我知道你有一个逻辑问题,但我强烈建议你考虑使用 Joda-Time来管理 Java/Android 时间和任何与时间相关的东西。时间很难做到正确,有很多事情你没有想到(时区、夏令时等),更不用说 Joda Time 非常简单,比 Java 更容易使用和理解标准。

由于您的应用程序似乎非常依赖时间,因此这是一个好主意。

现在回到你的逻辑。使用 Joda,只需为您的预订时间创建一个Interval实例,并为您请求的票务时间创建一个实例并执行一些时间计算。您还可以使用更抽象的Period

它应该相对容易且非常直接。

例子:

DateTime bookedstart = new DateTime(2013, 10, 25, 13, 0, 0, 0); //13:00
DateTime bookedend = new DateTime(2013, 10, 25, 14, 0, 0, 0);   //14:00
Interval interval = new Interval(bookedstart, bookedend);
DateTime requested = new DateTime(2013, 10, 25, 15, 45, 0, 0); //15:45
System.out.println(interval.contains(requested)); // false, so it's available.
于 2013-11-12T19:30:57.547 回答