Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Временной промежуток. Help! Мозг закипел. 
:(
    Опции темы
Tiarwe
Дата 18.8.2013, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.8.2011

Репутация: нет
Всего: нет



Здравствуйте!
Вещь простая до ужаса, но голова чего-то совсем не варит. В общем суть такая: есть диапазон времени от и до. Например от 4:00 до 8:00. Требуется определить, находится ли текущее время в этом диапазоне. Всё просто a < time < b. Трудности возникают при параметрах, например, таких: от 22:00 до 3:00. Подскажите, пожалуйста.
PM MAIL   Вверх
akizelokro
Дата 18.8.2013, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



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


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
vvms
Дата 19.8.2013, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.10.2008

Репутация: нет
Всего: 1



Цитата(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. Потом проверить попадание хотя в один из них
PM MAIL   Вверх
Tiarwe
Дата 19.8.2013, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 24.8.2011

Репутация: нет
Всего: нет



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

vvms, надеялся что есть способ без разбивания... Ладно, буду пробовать так. Спасибо  smile
PM MAIL   Вверх
Alexeis
Дата 19.8.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Можно использовать время в сишном формате 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
Т.е. можно просто сравнивать такие величины по больше меньше и не думать о границах. Правда не подойдет если нужна точность выше секунд. И еще время тут возвращается без учета часовых поясов. Т.е. исходные диапазоны тоже нужно приводить к гринвичу. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
akizelokro
Дата 19.8.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Код

        // определяем текущее локальное время
    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

Это сообщение отредактировал(а) akizelokro - 20.8.2013, 05:37


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1278 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.