2014-02-07 5 views
0

У меня есть работа, которая работает от данного дня до определенного дня недели. Например, с понедельника по субботу. Я был в состоянии закрыть случай, когда stopday> starday для eg-startday-> Monday stopDay-> Saturday , но когда диапазон изменится на что-то вроде среды по понедельник, я не могу осветить этот случай.Как проверить, находится ли день между диапазоном?

private boolean isNotWindow(DateTime todayDate) { 
     final int hr = 3600; 
     final int min = 60; 
     int stopDay = 
       Integer.parseInt(ShipmentTrackingEmailProperties.getInstance().getProperty(
         ShipmentTrackingEmailProperties.SHIPMENT_EMAIL_STOP_DAY)); 
     int startDay = 
       Integer.parseInt(ShipmentTrackingEmailProperties.getInstance().getProperty(
         ShipmentTrackingEmailProperties.SHIPMENT_EMAIL_START_DAY)); 

     if(stopDay<startDay) 
     { 
      //Not able to figure out?????? 
     } 
     if (todayDate.getDayOfWeek() >= stopDay) { 
      String stopTime = 
        ShipmentTrackingEmailProperties.getInstance().getProperty(ShipmentTrackingEmailProperties.SHIPMENT_EMAIL_STOP_TIME); 
      String[] array = stopTime.split(":"); 
      System.out.println(array[0] + " " + array[1] + " " + array[2]); 
      int hh = Integer.parseInt(array[0]); 
      int mm = Integer.parseInt(array[1]); 
      int ss = Integer.parseInt(array[2]); 
      int tSec = todayDate.getHourOfDay() * hr + todayDate.getMinuteOfDay() * min + todayDate.getSecondOfDay(); 
      int sSec = hh * hr + mm * min + ss; 
      if (tSec > sSec) { 
        return true; 
      } 
     } 
     if (todayDate.getDayOfWeek() <= startDay) { 
      String startTime = 
        ShipmentTrackingEmailProperties.getInstance().getProperty(ShipmentTrackingEmailProperties.SHIPMENT_EMAIL_START_TIME); 
      String[] array = startTime.split(":"); 
      int hh = Integer.parseInt(array[0]); 
      int mm = Integer.parseInt(array[1]); 
      int ss = Integer.parseInt(array[2]); 
      int tSec = todayDate.getHourOfDay() * hr + todayDate.getMinuteOfDay() * min + todayDate.getSecondOfDay(); 
      int sSec = hh * hr + mm * min + ss; 
      if (tSec <= sSec) { 
       LOG.info("Not a valid day to send mail ." + todayDate.getDayOfWeek()); 
       return true; 
      } 
     } 
      LOG.info("Valid day to send mail ." + todayDate.getDayOfWeek()); 
     return false; 
    } 

Эта функция возвращает истину, если день не попадает в range.So как покрыть случай, когда
stopDay < startDay

+0

Я не смотрю на ваш код. Но я предлагаю вам попробовать API-интерфейс joda. У меня много удобных функций для задач, связанных с датой. Chenqui. –

+0

Использует 'JodaTime' вариант? Если это так, вы можете определить «Интервал» и проверить, содержит ли он вашу дату. – Keppil

+0

Вот сообщение, которое расскажет нам, как вы это делаете с Джодой - http://stackoverflow.com/questions/883060/how-can-i-determine-if-a-date-is-between-two-dates- in-java Это очень просто. –

ответ

1

Понадобится:

if startday<stopday then 
    if the day is in the interval (startday,stopday) then OK 
    else NotOk 
else 
    if the day is not in the interval (startday,stopday) then OK 
    else NotOk 

Это может быть гораздо проще сделать так:

If((day-startday)*(stopday-day)*(stopday-startday)>=0) then OK 
else NotOk 
+0

Вот что я сделал. Спасибо .. –

+0

Единственное, что я добавил, я должен был учитывать время. Так что я вычислил секунды через сутки (dayOfWeek-1) * 24 * 3600 + no. секунд и сравнил их вместо дня. –

+1

@ RamanSingh Конечно. Я только хотел показать главную мысль ... Я люблю логику, основанную на подсчете :-) – Gangnus

1

Вы можете использовать эту функцию, чтобы проверить в течение дня в диапазоне

private static boolean inRange(int startDay, int stopDay, int checkMe) { 
    if(startDay==stopDay) { 
      if(startDay==checkMe){ 
        return true; 
      } else { 
        return false; 
      } 
    } 
    while(startDay!=stopDay) { 
     if(startDay==checkMe || stopDay==checkMe) { 
      return true; 
     } 
     if(startDay==7) { 
      startDay =0; 
     } 
     startDay++; 
    } 
    return false; 
} 

Надеюсь, это поможет.

+0

Правильно сэр, но вы могли бы предложить изменить в моем коде. Это будет полезно. Спасибо .. –

+0

Вы можете использовать функцию inRange, чтобы узнать, находится ли ваш день в дневном и дневном диапазонах. Если он падает в дневном диапазоне, вы можете рассчитать время начала и время окончания и посмотреть, падает ли время TodayDate в этом диапазоне или нет. – Sanjeev

Смежные вопросы