在我的应用程序中,我必须比较存储在整数变量中的两个时间值。此处的所有值均为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点
int startTime = 1395; // 23:15
int endTime = 270; // 04:30
int now = 120; // 02:00
现在if条件不起作用。我有什么想法可以解决这个问题?我必须将值保存在整数变量中,而不是日历或日期对象或其他内容。
顺便说一下,我认为以这种方式存储时间的想法(不是我自己的)只有整数才是很好的。它使用的内存较少,使用modulo
和divider
运算符可以轻松获得真实的小时和分钟。
答案 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可能是一个更好的选择,包括时间段和持续时间等类,并比较它们。