0

在我的应用程序中,我必须比较存储在整数变量中的两个时间值。这里的所有值都是 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介于startTime和之间endTime。当然我可以用这个条件来检查这个:

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

这在大多数情况下效果很好,但如果startTime大于endTime原因它不起作用。举个例子:现在是 02:00 点

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

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

顺便说一句,我认为仅使用整数以这种方式存储时间的想法(不是我自己的)很棒。它使用的内存非常少,并且使用moduloanddivider运算符很容易获得真正的小时和分钟。

4

2 回答 2

1

只需编辑您的 if 语句以检查 startTime 是否在不同的日期(startTime > endTime)。如果是这样,“现在”介于 >= startTime 或 <= endTime 之间:

if(startTime <= now && endTime >= now || (startTime > endTime && (now <= endTime || now >= startTime)))
于 2013-07-18T00:01:04.030 回答
0

您可能会提前对变量进行规范化,以便后面的代码更简单、更易于阅读:

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

使用日历和日期都相当不直观;如果您要进行大量时间操作,Joda Time可能是一个更好的选择,它提供诸如时间段和持续时间之类的类并进行比较。

于 2013-07-18T00:33:24.680 回答