Другие языки программирования и технологии

Вопрос по Delphi касаемо времени.

пишу прогу которая должка производить выбранные пользователем действия на протяжении указанного промежутка времени и вот все бы ничего, но вот такие условия не срабатывают, если указан промежуток с 20:00 до 08:00 а время 03:00 или 22:00 такое услови создать просто не реально....

if((Time) <= StrToTime(TimeDO)) and ((Time) <= StrToTime(TimeOT)) then
begin
...
end;
if ((Time) >= StrToTime(TimeOT)) and ((Time) <= StrToTime(TimeDO)) then
begin
...
end;

на форуме нарыл инфу но как реализовать не понимаю :((

с форума "Все нормально будет, если добавить проверку второго предела не принадлежность к следующим суткам, т. е. если второй предел меньше первого - значит это час уже следующих суток, а значит расстояние до него будет равно 24-первый предел + второй предел!"
Не пробовал немного подумать головой, вместо того чтобы рыться по форумам и бездумно копипастить всё подряд? Ведь несложно догадаться, что проблема связана с переходом через полночь, а переход происходит когда ОТ > ДО. Также несложно догадаться, что узнать входит ли время в заданный промежуток можно также проверив находится ли оно за пределами промежутка. И это, собственно, и есть решение:

function TimeInRange(tFrom, tTo, tNow: TTime): Boolean;
begin
if tFrom > tTo then
Result := not ((tNow > tTo) and (tNow < tFrom))
else
Result := (tNow >= tFrom) and (tNow <= tTo);
end;

if TimeInRange(StrToTime(TimeOT), StrToTime(TimeDO), Time) then
begin
ShowMessage('Время в заданном диапазоне');
end;
Стас Тихомиров
Стас Тихомиров
24 295
Лучший ответ
Евгений Желтов спасибо, но я решил уже данную задачу, я над данным вопросом долго бился, но постоянно думал в одном направлении
А в чем вопрос? Куча какого-то потока сознания и ни одного вопросительного знака.
Вношу ясность: компьютерное время - это количество дней, прошедших с 01.01.1900 00:00
То есть целая часть - это дни (дата), дробная - время внутри каждого дня в долях дня.
Исходи из этих фактов и здравого смысла и будет тебе счастье. Если у тебя намечается переход через полночь - добавляй единичку.
Потому что надо сначала решить задачу на бумаге, а только потом программировать.
Для начала - определись, как именно программа должна работать. Период с 8:00 до 20:00 - это в пределах одних суток? Хорошо. А если с 20:00 до 8:00 - то это значит с 20:00 одних суток до 8:00 следующих? Или что пользователь ошибся? Хорошо, допустим, это следующие сутки. Тогда второе время надо увеличить на 1 сутки, о чем тебе и написали - ведь StrToTime('8:00') даст меньшее значение, чем StrToTime('20:00'), а тебе нужно большее.
Вот это все сформулируй словами, а только потом начинай программировать. Ты уже второй вопрос пишешь, но ни разу не написал, что второе меньшее время должно означать следующие сутки - видимо, потому, что пытаешься писать наугад, а не разбираясь, что же должно у тебя выйти. И твоя проблема именно в этом, а то, что мучаешься со временем в программе - уже следствие.
Евгений Желтов сложно предугадать, какой интервал задаст пользователь, но прога нацелена на работу ночью, будет ограничивать детей от сидения за играми сутками
Евгений Желтов психанул, и решил вроде бы:

if Заданное время НАЧАЛА > Заданное время ОКОНЧАНИЯ then
begin
if текущее время >= Заданное время НАЧАЛАа then
begin
...
end;
if текущее время <= Заданное время ОКОНЧАНИЯ then
begin
...
end;
end;