如何使用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 互斥代码片段