Функция временного канала.

 

Здравствуйте, уважаемые форумчане.

Помогите доработать функцию временного канала, на данный имеется код.

bool CloseInPeriod (int HourNow, int MinuteNow, int OpenHour, int OpenMinute, int CloseHour, int CloseMinute) {

bool result = False;
bool result1 = False;
bool result2 = False;

int NewOpenHour;
int NewOpenMinute;
int NewCloseHour;
int NewCloseMinute;

if (OpenHour < 0) NewOpenHour = 24 + OpenHour;
else NewOpenHour = OpenHour;
if (OpenMinute < 0) NewOpenMinute = 60 + OpenMinute;
else NewOpenMinute = OpenMinute;
//---
if (CloseHour < 0) NewCloseHour = 24 + CloseHour;
else NewCloseHour = CloseHour;
if (CloseMinute < 0) NewCloseMinute = 60 + CloseMinute;
else NewCloseMinute = CloseMinute;
//---

if ((HourNow >= NewOpenHour && MinuteNow >= NewOpenMinute) || (HourNow > NewOpenHour && MinuteNow < NewOpenMinute)) result1 = True;
else result1 = False;

if ((HourNow < NewCloseHour) || (HourNow == NewCloseHour && MinuteNow <= NewCloseMinute) || (HourNow > NewCloseHour && OpenHour > CloseHour)) result2 = True;
else result2 = False;


if (result1 == True && result2 == True) result = True;
else result = False;

//---
return (result);

}

Проблема только при временном канале до 00.00, например при 23.30 по 2.30. То есть при (Тек. час, тек. минута, -1, 30, 2, 30)

Заранее спасибо за ответ.

 

Все уже давно доработано-переработано

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
  datetime dtBegin, dtEnd;        // Время начала и окончания работы
  int      hc, he;                // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);
  hc     =TimeHour(TimeCurrent());
  he     =TimeHour(dtEnd);
  if (dtBegin>=dtEnd) {
    if (hc>=he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
  }

  if (TimeCurrent()>=dtBegin && TimeCurrent()<=dtEnd) return(True);
  else return(False);
}
 
Спасибо за помощь, всё получилось.
 

Только например при временном от 23.30 до 2.30, фелс возвращается при 02.00. То есть минуты часа окончания в таком варианте не работают.

P.S. Я говорю про функцию bool isTradeTimeInt

 
Альтернативные функции еще какие-то есть? А то при 23.30 до 2.30 минуты окончания не учитываются...
 

Исправь строчку

if (hc>=he) de+=24*60*60; else db-=24*60*60;

на

if (hc>he) de+=24*60*60; else db-=24*60*60;
 
Спасибо Roger, теперь всё работает.