如何使用java中的时间间隔

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用java中的时间间隔相关的知识,希望对你有一定的参考价值。

我有这种情况:我正在努力做一个关于电影用户注释的练习。用户目前只能在一部电影中(但如果他愿意,他可以为下一个节目购买另一张票)。每个节目都有开始时间和结束时间(所以我可以用时间戳来表示它们)。我的问题是:如何添加一个控件,即在一个节目中参与的用户不能同时为另一个节目购买另一张票?我们可以想象一个具有唯一ID的用户和一个带有Id的电影室。第三个对象(使用Id,startTime,EndTime显示)。我的问题不是关于代码实现,而是关于逻辑的更多问题。

一个人只能在一个节目的某个时间间隔内参加一个节目。(他不能在两个不同的节目中同时参与其中,因为他需要尊重节目的开始时间和结束时间)。出于某种原因,如果用户试图在同一个地方为另一个节目购买另一张票,他就无法这样做,因为他会按照这个间隔跟随节目。

答案

在您的预订功能中实现类似挂钩的功能。在预订完成之前,将检查是否允许用户预订此特定节目。只有在检查是否为正时,才能触发实际的预订进度。这包括在你的系统中。

因为我不知道您的项目是什么样的(例如,您使用哪个数据库)钩子的实现可能非常多变。如果您可以获得按时间排序的执行用户的节目列表,那将是一个优势。这将允许修复检查是否已经预订的节目与新节目重叠。

此检查的可能伪代码实现可以是:

if (usersShowList.stream().filter(show -> (show.startTime < newShow.startTime && show.endTime > newShow.startTime)).count() <= 0) {
...
}

如果您可以更详细地指定您的问题,如果您需要进一步的评论,那将非常有用。

另一答案

我给你一个简单的例子,老电影和新电影。为了你的目的,你需要更高,迭代所有电影。

  Calendar cal=Calendar.getInstance();

    //I just add some comments to be clear about the logic.
    //E_new dateEndStartMovie
    //E_old date dataEndOldMovie
   //S_new dateStartMovie
   //S_old dataStartOldMovie

   Date dateStartMovie=new Date();
   cal.setTime(dateStartMovie);
   cal.add(Calendar.HOUR_OF_DAY, 2);
   Date dataEndMovie=cal.getTime();

   cal.add(Calendar.HOUR_OF_DAY, -3);
   Date dataStartOldMovie=cal.getTime();
   cal.add(Calendar.HOUR_OF_DAY, 2);
   Date dataEndOldMovie=cal.getTime();

    System.out.println("data start movie"+dateStartMovie);
    System.out.println("data end movie"+dataEndMovie);
    System.out.println("data start  old movie"+dataStartOldMovie);
    System.out.println("data end old  movie "+dataEndOldMovie);
   if (

           dateStartMovie.getTime() > dataStartOldMovie.getTime() //S_new > S_old

           && dateStartMovie.getTime() < dataEndOldMovie.getTime() //S_new < E_old
           ||
           (dataEndMovie.getTime() > dataStartOldMovie.getTime() //E_new > S_old
           && dataEndMovie.getTime() < dataEndOldMovie.getTime()) //E_new < E_old
           || 
           (dataEndMovie.getTime() > dataEndOldMovie.getTime() //E_new > E_old
           && dateStartMovie.getTime()<dataStartOldMovie.getTime())//S_new < S_old
        // i think that we are missing even S_new < S_old  and F_new > F_old ( i can have more film in a bigger interval so i could not send another ticket if in the big interval the person buy a ticket
        )
           {
       System.out.println("Error.Cannot buy ticket at this time. ");
   }

以上是关于如何使用java中的时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 获取数据到 Recyclerview 中的片段?

LockSupport.java 中的 FIFO 互斥代码片段

如何在片段中使用 GetJsonFromUrlTask​​.java

如何在导航抽屉活动模板中的片段之间传递字符串变量

如何重构这个 Java 代码片段

java - 如何在java脚本或jquery中单击两次相同的按钮时计算间隔时间