以整数保存和比较时间

时间:2013-07-17 23:56:32

标签: java date time calendar integer

在我的应用程序中,我必须比较存储在整数变量中的两个时间值。此处的所有值均为24小时格式。我使用此代码生成值:

Calendar c    = Calendar.getInstance();

int startTime = startHour * 60 + startMin;
int endTime   = endHour * 60 + endMin;
int now       = c.get(Calendar.HOUR_OF_DAY) * 60 + c.get(Calendar.MINUTE);

现在我必须检查currentTime是否在startTimeendTime之间。当然,我可以通过以下条件来检查:

if(startTime <= now && endTime >= now) 
// between...

在大多数情况下效果很好,但如果startTime大于原因的endTime则不起作用。我们来看这个例子:现在是凌晨02点

int startTime = 1395; // 23:15
int endTime   = 270;  // 04:30
int now       = 120;  // 02:00

现在if条件不起作用。我有什么想法可以解决这个问题?我必须将值保存在整数变量中,而不是日历或日期对象或其他内容。

顺便说一下,我认为以这种方式存储时间的想法(不是我自己的)只有整数才是很好的。它使用的内存较少,使用modulodivider运算符可以轻松获得真实的小时和分钟。

2 个答案:

答案 0 :(得分:1)

只需编辑你的if语句,检查startTime是否在另一天(startTime&gt; endTime)。如果是这样的话,'now'介于它们之间,如果它是&gt; = startTime或&lt; = endTime:

if(startTime <= now && endTime >= now || (startTime > endTime && (now <= endTime || now >= startTime)))

答案 1 :(得分:0)

您可以尽早规范化变量,以便后面的代码更简单易读:

public void doSomething(int st, int et) {
   int startTime = Math.min(st, et);
   int endTime = Math.max(st, et);
   ...

日历和日期都非常不直观;如果你要进行大量的时间操作,Joda Time可能是一个更好的选择,包括时间段和持续时间等类,并比较它们。