![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вот ведь задачка... [D6, Win2k]
tovSuhov © (2002-06-24 10:12:00)Мастера, подмогните...Что-то клинануло меня...
Необходимо определить, входит ли указанное время во времянной интервал. Когда задаваемый интервал вида 10:00 - 18:00 (т.е. его начало меньше его конца) все просто:
if ((my_time >= time_begin) and (my_time <= time_end))
then (...)
Но когда интервал такого вида : 22:00 - 6:00
Вот тут начинаются проблемы...
Может кто подскажет алгоритм?
tovSuhov (2002-06-24 11:28:00) [1]Точно!!!
Все гениальное просто! Спасибо!
MBo (2002-06-24 11:27:00) [2]сделай два интервала 22-24 и 00-06
kull (2002-06-24 11:27:00) [3]
> kull © (24.06.02 11:13)
Так вот тебе и без дней...
Kaban (2002-06-24 11:25:00) [4]Логика следующая:
if time_begin < time_end then
begin
if my_time between [time_begin, time_end] then
begin
end;
end
else
if not (my_time between [time_end, time_begin]) then
begin
end;
tovSuhov (2002-06-24 11:17:00) [5]Нет...Дело в том, что важно именно время, а не дни...
(Пишу тарификацию)
И поэтому нужно выяснить, что, к примеру, 2:00 входит в отрезок
23:00 - 6:00
Канадин Владимир (2002-06-24 11:13:00) [6]TDateTime в себе содержит день (целая часть) и время (дробная)
kull (2002-06-24 11:13:00) [7]Я думаю так:
function InInterval(const my_time,time_begin,time_end: тип): Boolean;
begin
Result := (my_time >= time_begin) and
(my_time <= time_end)
or
(time_begin>time_end) and
(InInterval(my_time,time_begin,24:00) or
InInterval(my_time,0:00,time_end));
end;
Зависит от того, конечно какого типа my_time.
Kaban (2002-06-24 10:21:00) [8]Что нибудь типа:
if time_begin + my_time >= time_end then
MBo (2002-06-24 10:19:00) [9]учти дату и все будет хорошо
(или прибавляй 1 при переходе суток)