首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中检查两个时间集之间的可用性

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

Stack Overflow用户
提问于 2013-11-12 18:39:54
回答 2查看 1.1K关注 0票数 0

如何在java.I中检查给定的时间集是否可用,我将时间以“yyyy:mm:ss”格式存储在来自json响应的数组列表中。例如,在接下来的时间预订了票,而新客户在这段时间内正在请求票证,我如何从已经预订的时间中检查门票的可用性。

样品票已预订时间:

代码语言:javascript
复制
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:

以下时间的新客户请求票证(available time):

代码语言:javascript
复制
    start time  "2013-11-11 10:04:00";
    end time    "2013-11-11 10:59:00";

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

场景2:

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

代码语言:javascript
复制
    start time  "2013-11-11 09:55:00";
    end time    "2013-11-11 10:59:00";

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

场景:

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

代码语言:javascript
复制
    start time  "2013-11-11 10:20:00"
    end time    "2013-11-11 11:20:00"

此时间集不可用,因为 11:20:00 已在 time set 3中预订

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

代码语言:javascript
复制
    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中的逻辑问题。

EN

回答 2

Stack Overflow用户

发布于 2013-11-12 19:16:24

在没有新的数据结构的情况下,可能有更直接的方法来实现它,但是使用区间树来实现您的目标。

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

这里是一个区间树的Java实现。

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 19:30:57

我知道您有一个逻辑问题,但我强烈建议您考虑使用尤达-时间来管理Java/Android时间和任何与时间相关的内容。时间是很难做好的,有很多事情你没有想到(时区、日光节约等等),更不用说Joda时间是非常直接的,比Java标准更容易使用和理解。

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

现在回到你的逻辑。有了Joda,就需要为您预定的时间创建一个间隔实例,为您请求的票务时间创建一个实例,并执行一些时间计算。您还可以使用更抽象的句号

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

示例:

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19937299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档