Как проверить, находится ли день между диапазоном?

У меня есть работа, которая длится с определенного дня до определенного дня недели. Например (с понедельника по субботу). Мне удалось охватить случай, когда день остановки> звездный день для eg-startday-> понедельник stopDay-> суббота, но когда диапазон меняется на что-то вроде среды на понедельник, я не могу охватить этот случай.

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;
    }

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


person Raman Singh    schedule 07.02.2014    source источник
comment
Я не смотрел ваш код. Но я предлагаю вам попробовать API времени joda. У меня есть много простых в использовании функций для задач, связанных с датами. Ченки.   -  person Erran Morad    schedule 07.02.2014
comment
Можно ли использовать JodaTime? Если это так, вы можете определить Interval и проверить, содержит ли он вашу дату.   -  person Keppil    schedule 07.02.2014
comment
Вот сообщение SO, в котором рассказывается, как у вас дела с Joda - stackoverflow.com/questions/883060/ Это очень просто.   -  person Erran Morad    schedule 07.02.2014
comment
Манипуляции с датой в порядке. Но как работать с днями и временем и проверять, попадает ли определенный день, время в диапазон.   -  person Raman Singh    schedule 07.02.2014
comment
Все эти функции предназначены для проверки даты. Я хочу проверить, например, Суббота выпадает ч / б со среды по понедельник.   -  person Raman Singh    schedule 07.02.2014
comment
@RamanSingh - Я неправильно подбираю слова. У него гораздо больше функциональных возможностей, чем у стандартного Java Date API. Смотрите ссылку, попробуйте и дайте нам знать.   -  person Erran Morad    schedule 07.02.2014
comment
@BoratSagdiyev - Думаю, вы неправильно поняли вопрос. У меня есть ДЕНЬ (день недели) и время, и я хочу узнать, лежит ли он ч / б с учетом DAYOFWEEK и TIME.   -  person Raman Singh    schedule 07.02.2014
comment
Что такое сегодняДата? Joda DateTime?   -  person assylias    schedule 07.02.2014
comment
@BoratSagdiyev, опера, кажется, уже использует joda ...   -  person assylias    schedule 07.02.2014
comment
да todayDate - это объект DateTime из JODA Api   -  person Raman Singh    schedule 07.02.2014


Ответы (2)


Тебе нужно:

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
person Gangnus    schedule 07.02.2014
comment
Единственное, что я добавил, это то, что мне нужно было также учитывать время. Итак, я рассчитал секунды в днях как (dayOfWeek-1) * 24 * 3600 + no. секунд и сравнил их вместо дня. - person Raman Singh; 07.02.2014
comment
@RamanSingh Конечно. Я только хотел показать главную мысль ... Люблю логику, основанную на счете :-) - person Gangnus; 07.02.2014

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

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;
}

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

person Sanjeev    schedule 07.02.2014
comment
Это правильно, сэр, но не могли бы вы предложить отредактировать мой код. Это будет полезно. Спасибо.. - person Raman Singh; 07.02.2014
comment
Вы можете использовать функцию inRange, чтобы узнать, находится ли ваш день в диапазоне начальных и конечных дней. Если он попадает в дневной диапазон, вы можете рассчитать время начала и время окончания и посмотреть, попадает ли время todayDate в этот диапазон или нет. - person Sanjeev; 07.02.2014