Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Временной промежуток.


Автор: Tiarwe 18.8.2013, 22:04
Здравствуйте!
Вещь простая до ужаса, но голова чего-то совсем не варит. В общем суть такая: есть диапазон времени от и до. Например от 4:00 до 8:00. Требуется определить, находится ли текущее время в этом диапазоне. Всё просто a < time < b. Трудности возникают при параметрах, например, таких: от 22:00 до 3:00. Подскажите, пожалуйста.

Автор: akizelokro 18.8.2013, 22:35
ты строковые значения сравниваешь или время в миилисекундах, например? то есть, время с датой или просто время суток?
если время суток, то попадание в любой из интервалов 0:00-3:00 или 22:00-24:00
если реальное время, то смотришь по попаданию в один интервал, например от 22:00 18 августа до 03:00 19 августа (в миллисекундах).
да и лучше задачи на время утром решать

Автор: vvms 19.8.2013, 03:35
Цитата(Tiarwe @ 18.8.2013,  22:04)
Всё просто a < time < b. Трудности возникают при параметрах, например, таких: от 22:00 до 3:00. Подскажите, пожалуйста.

Для случая от 22:00 до 3:00 можно сделать просто: проверить, если "до" больше, чем "от", то разбить интервал на два от 22:00 до 23:59 и от 00:00 до 3:00. Потом проверить попадание хотя в один из них

Автор: Tiarwe 19.8.2013, 10:36
akizelokro, время в миллисекундах. Временной промежуток - день.

vvms, надеялся что есть способ без разбивания... Ладно, буду пробовать так. Спасибо  smile

Автор: Alexeis 19.8.2013, 10:57
Можно использовать время в сишном формате time_t 
Код

time_t time (time_t* timer);

The value returned generally represents the number of seconds since 00:00 hours, Jan 1, 1970 UTC
Т.е. можно просто сравнивать такие величины по больше меньше и не думать о границах. Правда не подойдет если нужна точность выше секунд. И еще время тут возвращается без учета часовых поясов. Т.е. исходные диапазоны тоже нужно приводить к гринвичу. 

Автор: akizelokro 19.8.2013, 15:03
Код

        // определяем текущее локальное время
    struct tm curtime;
    __time64_t long_time;
    _time64( &long_time ); 
    _localtime64_s( &curtime, &long_time ); 
    if( (curtime.tm_hour > beginLabourHour) || ( (curtime.tm_hour == beginLabourHour) && ( curtime.tm_min >= beginLabourMinute )))
    {
        if( (curtime.tm_hour < finishLabourHour) || ( (curtime.tm_hour == finishLabourHour) && ( curtime.tm_min <= finishLabourMinute )))
        {
            result = false;
        }
    }



Тут сложного нет ничего

Добавлено @ 15:15
Ну, просто надо брать исключающий диапазон и смотреть попадание в него. Если попадает, то результат true и в твой диапазон не попадает.

Здесь накосячил сначала. Если попадает - true. Если не попадает - false

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)