在我的应用程序中我正在更新一些东西,如果时间是在用户选择的一天中的某些小时之间。如果用户选择“07-21”之类的东西,而不是过夜的“21-07”,它可以正常工作。 我如何检查时间是我得到当前小时并将其转换为毫秒。然后我检查当前毫秒是否在所选小时之间(这些小时也转换为毫秒)。 像这样:
if (currentMilli >= startHourMilli && currentMilli <= endHourMilli)
问题:如果用户选择午夜时间(例如19-08)的任何内容,则无效。
我尝试了很多东西,但我无法弄清楚如何做到这一点。
感谢任何帮助!
答案 0 :(得分:2)
日期具有比较两个日期之前和之后的功能。 希望此文档可以帮助您:
http://developer.android.com/reference/java/util/Date.html#after(java.util.Date)
http://developer.android.com/reference/java/util/Date.html#before(java.util.Date)
最好的问候。
答案 1 :(得分:2)
当你经过午夜时,你会把一年中的一天增加1吗?否则你的
startHourMilli
可能大于endHourMilli
,而您的if子句将始终为假。
解决方案是使用Calendar类的add-method
。因此,我计算间隔的长度(以小时为单位),并将此值添加到我们的日历实例中。
int start = 21; // let's take your failing example: 21-07
int end = 7;
int hours = (end - start) % 24; // here hours will be 14
Calendar cal = Calendar.getInstance();
// set calendar to TODAY 21:00:00.000
cal.set(Calendar.HOUR_OF_DAY, start);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long startHourMilli = cal.getTimeInMillis();
// add 14 hours = TOMORROW 07:00:00.000
cal.add(Calendar.HOUR_OF_DAY, hours);
long endHourMilli = cal.getTimeInMillis();
请告诉我这是否有帮助:)
答案 2 :(得分:0)
我正在回答我自己的问题,因为我认为我想出了一些可能适用于我正在尝试做的事情:
if(endHourMilli < startHourMilli){
if(currentMilli >= startHourMilli && currentMilli <= 23*3600000 || currentMilli >= 0 && currentMilli <= endHourMilli){
//Do whatever
}
}else{
if (currentMilli >= startHourMilli && currentMilli <= endHourMilli) {
//Do whatever
}
}
即使endMilli小于startMilli,还是我搞砸了什么?
答案 3 :(得分:0)
我知道我参加派对有点晚了,但最近我开发了需要在指定时间内工作的Android应用程序,因为我不喜欢使用Calendar
我最终使用了这样的东西:
// if start hour is later than end hour
// example: start = 21, end = 07
int startHourMilli = 21, endHourMilli = 07;
// just add one day (in your case in millis)
if (startHourMilli > endHourMilli) endHourMilli += 24 * 60 * 60 * 1000;
// now here you can check without any problems
if(currentMilli >= startHourMilli && currentMilli < endHourMilli){
// within timeframe, do stuff you need
} else {
// not in timeframe, find solution
}
现在我知道你发现自己是一个解决方案,但我认为我的方法可能更容易理解(至少对新手来说可能会感到困惑)。
答案 4 :(得分:0)
您可以随时使用简单的if / else 24小时格式,而无需使用函数或其他计算:
例如:从StartHour到StopHour的整个时间段(停止小时包括所有分钟)
int StartHour = 23; //从23:00开始
int StopHour = 9; //直到当前小时为9,包括直到9:59
int CurrentHour = 2;
if (StartHour > StopHour)
{
if (CurrentHour < StartHour && StopHour < CurrentHour)
{Inside = false;}
else
{Inside = true;}
}
else
{
if (CurrentHour >= StartHour && StopHour >= CurrentHour)
{Inside = true;}
else
{Inside = false;}
}
最后如果Inside == true CurrentHour的时间范围为StartHour - StopHour(全停小时)
如果两者相等则做其他事情:
if(StartHour == StopHour){..............};
对于例2:如果您想停在完全 StopHour小时,则需要进行一些更改:
int StartHour = 23; //从23:00开始
int StopHour = 9; //这将在8:59之后停止
int CurrentHour = 2;
if (StartHour2 > StopHour2)
{
if (Hr24 < StartHour2 && StopHour2 <= Hr24)
{Quiet = false;}
else
{Quiet = true;}
}
else
{
if (Hr24 >= StartHour2 && StopHour2 > Hr24)
{Quiet = true;}
else
{Quiet = false;}
}
最后如果Inside == true CurrentHour在时间范围StartHour - StopHour(exact)
答案 5 :(得分:0)
我认为ottel142几乎可以,但它应该是:
public static boolean checkIfNight() {
int start = 21;
int end = 7;
int hours = 24 - start + end;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, start);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long startHourMilli = cal.getTimeInMillis();
KLog.e(cal.getTime());
cal.add(Calendar.HOUR_OF_DAY, hours);
long endHourMilli = cal.getTimeInMillis();
long currentMilli = Calendar.getInstance().getTimeInMillis();
if (currentMilli >= startHourMilli && currentMilli <= endHourMilli)
return true;
else return false;
}