Android - 检查时间是否在一天中的某些时段之间

时间:2013-01-29 21:30:54

标签: android time milliseconds

在我的应用程序中我正在更新一些东西,如果时间是在用户选择的一天中的某些小时之间。如果用户选择“07-21”之类的东西,而不是过夜的“21-07”,它可以正常工作。 我如何检查时间是我得到当前小时并将其转换为毫秒。然后我检查当前毫秒是否在所选小时之间(这些小时也转换为毫秒)。 像这样:

    if (currentMilli >= startHourMilli && currentMilli <= endHourMilli) 

问题:如果用户选择午夜时间(例如19-08)的任何内容,则无效。

我尝试了很多东西,但我无法弄清楚如何做到这一点。

感谢任何帮助!

6 个答案:

答案 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;

}