Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中检查两个时间集之间的可用性_Java_Android_Data Structures_Time - Fatal编程技术网

如何在java中检查两个时间集之间的可用性

如何在java中检查两个时间集之间的可用性,java,android,data-structures,time,Java,Android,Data Structures,Time,如何检查给定的时间集是否适用于java中已预订的时间。我将时间以“yyy-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

如何检查给定的时间集是否适用于java中已预订的时间。我将时间以“yyy-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:

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";
以下时间(可用时间)的新客户请求票证:

此时间集可用,因为在特定时间没有预定时间。

场景2:

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";
以下时间(不可用时间)的新客户请求票证:

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

场景:

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";
以下时间(不可用时间)的新客户请求票证:

此时间集不可用,因为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"));
DateFormat format=newsimpledateformat(“yyyy-MM-dd-hh:MM:ss”);
ArrayList dealStart=新建ArrayList();
ArrayList dealEnd=新的ArrayList();
add(formate.parse(jsonObject.getString(“预定的开始时间”);
add(formate.parse(jsonObject.getString(“booked_end_time”));

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

在没有新数据结构的情况下,可能会有更直接的方法来解决这个问题,但这些方法用于实现您的目标

在计算机科学中,区间树是一种有序的数据树 结构来保持间隔。具体来说,它允许 有效地查找与任何给定间隔或时间重叠的所有间隔 重点


是一个区间树的java实现。

< P>我知道你有逻辑问题,但是我强烈建议你考虑管理java/Android时代和任何与时间有关的东西。时间很难做对,有很多事情你没有考虑(时区,夏时制等)。,更不用说Joda时间非常简单,比Java标准更易于使用和理解

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

现在回到您的逻辑。使用Joda,您需要为预订的时间创建实例,为请求的票证时间创建实例,并执行一些时间数学。您也可以使用更抽象的方法

这应该是相对容易和非常直接的

例如:

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.

您忘记了一个场景:从8:00:00到11:00:00也不可用。您知道有多少张“已预订的票”吗将在您的数据集中?我们是在谈论10、100、1000、10000等吗?@Justin,特定日期的预订票证数量取决于用户预订。什么是DateTime类?它在java中不可用。单击Joda Time链接。;)假设DateTime requested=new DateTime(2013、10、25、13、0、0、0);我得到了真实(这是不可用的)。但时间不在时间间隔之间。是“按时间间隔执行”类中的任何操作。请提供帮助。2013年10月25日的13:00:00在上述时间间隔之间(bookedstart在该确切时间)。请尝试
DateTime requested=new DateTime(2013,10,25,12,59,0,0);
,鉴于上述情况,该值应为false。