пишу прогу которая должка производить выбранные пользователем действия на протяжении указанного промежутка времени и вот все бы ничего, но вот такие условия не срабатывают, если указан промежуток с 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-первый предел + второй предел!"
Другие языки программирования и технологии
Вопрос по Delphi касаемо времени.
Не пробовал немного подумать головой, вместо того чтобы рыться по форумам и бездумно копипастить всё подряд? Ведь несложно догадаться, что проблема связана с переходом через полночь, а переход происходит когда ОТ > ДО. Также несложно догадаться, что узнать входит ли время в заданный промежуток можно также проверив находится ли оно за пределами промежутка. И это, собственно, и есть решение:
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;
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;
Евгений Желтов
спасибо, но я решил уже данную задачу, я над данным вопросом долго бился, но постоянно думал в одном направлении
А в чем вопрос? Куча какого-то потока сознания и ни одного вопросительного знака.
Вношу ясность: компьютерное время - это количество дней, прошедших с 01.01.1900 00:00
То есть целая часть - это дни (дата), дробная - время внутри каждого дня в долях дня.
Исходи из этих фактов и здравого смысла и будет тебе счастье. Если у тебя намечается переход через полночь - добавляй единичку.
Вношу ясность: компьютерное время - это количество дней, прошедших с 01.01.1900 00:00
То есть целая часть - это дни (дата), дробная - время внутри каждого дня в долях дня.
Исходи из этих фактов и здравого смысла и будет тебе счастье. Если у тебя намечается переход через полночь - добавляй единичку.
Потому что надо сначала решить задачу на бумаге, а только потом программировать.
Для начала - определись, как именно программа должна работать. Период с 8:00 до 20:00 - это в пределах одних суток? Хорошо. А если с 20:00 до 8:00 - то это значит с 20:00 одних суток до 8:00 следующих? Или что пользователь ошибся? Хорошо, допустим, это следующие сутки. Тогда второе время надо увеличить на 1 сутки, о чем тебе и написали - ведь StrToTime('8:00') даст меньшее значение, чем StrToTime('20: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;
if Заданное время НАЧАЛА > Заданное время ОКОНЧАНИЯ then
begin
if текущее время >= Заданное время НАЧАЛАа then
begin
...
end;
if текущее время <= Заданное время ОКОНЧАНИЯ then
begin
...
end;
end;
Похожие вопросы
- Несколько вопросов по Delphi
- вопрос по delphi
- Трудный вопрос по Delphi.
- Вопрос по Delphi Image
- Вопрос о Delphi ! См.Внутри !!!
- Вопросы по Delphi помогите... Кто что знает пишите .. Спасибо!!!
- вопрос по Delphi (формы)
- Вопрос по delphi, помогите пожалуйста.
- вопрос по delphi 7.
- 2 простых вопроса про Delphi 7