Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать входит ли время в интервал?


Progh ©   (2004-11-17 07:51:00) 

Как узнать входит ли скажем время 01:00 В интервал между 22:00 и 03:00?


Progh   (2004-11-17 09:30:00) [1]


> [10] begin...end ©   (17.11.04 09:08)


Спасибо! Так вроде работает на УРА!


Gloomer   (2004-11-17 09:20:00) [2]

Логично было бы сделать так
С         По       Цена
00:00    03:00        100
03:00    6:30         200
6:30     18:00        300
21:00    24:00        100


begin...end   (2004-11-17 09:08:00) [3]


> [9] Progh   (17.11.04 08:50)


> С          По          Цена
> 21:00    03:00        100

> Так вот исходя из этой таблицы мне нужно узнать цену текущего времени(скажем 01:02)

Задача имеет много решений; откуда кто знает, к каким дням это всё относятся эти 21:00, 03:00 и 01:02; решение останется одно в случае указания дат.

На заметку: чтобы прибавить 1 день к дате, нужно к переменной TDateTime прибавить 1. Поэтому мне пришла в голову такая мысль: если время "С" и "По" не отличается больше чем на 1 сутки, то можно проверять так:

var
 T, T1, T2: TDateTime;

начало
 если T < T1 то
   T := T + 1;
 если T2 < T1 то
   T2 := T2 + 1;
 // а вот теперь проверяем на вхождение с помощью InRange()
конец.

P.S. Если что не так, то извиняйте, я ещё не проснулся.


Progh   (2004-11-17 08:50:00) [4]


> преобразуй Ttime в  TDateTime и сравнивай!
> типа так
> t=day+t
> MinInt:=day-1+MinInt;
> MaxInt:=day+MaxInt
> (токо это не код разбрись сам)


Как я понял переменная day=1. Вобщем при t=21:59 MinInt=22:00 MaxInt=3:00
ф-ия выдала true, хотя должна была false ;)


>  [7] begin...end ©   (17.11.04 08:32)

Дело в том что у меня есть таблица с ценами такого вида:

 С          По          Цена
21:00    03:00        100
03:00    6:30          200
6:30     18:00         300

Так вот исходя из этой таблицы мне нужно узнать цену текущего времени(скажем 01:02)


kostan   (2004-11-17 08:35:00) [5]

преобразуй Ttime в  TDateTime и сравнивай!
типа так
t=day+t
MinInt:=day-1+MinInt;
MaxInt:=day+MaxInt
(токо это не код разбрись сам)


begin...end   (2004-11-17 08:32:00) [6]

Имея только время, можно проверять вхождение только в пределах одних суток. Поскольку TTime = TDateTime = Double, то для проверки вхождения можно использовать аналогичную функцию для вещественных чисел, а именно одну из функций InRange (см. модуль Math).


begin...end   (2004-11-17 08:30:00) [7]


> [5] Progh   (17.11.04 08:20)


> TestTime(StrToTime(01:00'),StrToTime('22:00'),StrToTime('03:00'))
> - Так возвращает правильно (возвращает true)

Чего же тут правильного? Если ты это считаешь правильным, то тогда не обойтись без информации о сутках.


Progh   (2004-11-17 08:20:00) [8]


>  [3] kostan ©   (17.11.04 08:07)
> не знаешь дату? а как ты определил что  01:00>=22:00
> однако условие правильно не выполняется!


> а вообще подставляй дату к minInt (day-1) а к Maxint (day)


Ты имеешь ввиду так :
function TestTime(t,MinInt,MaxInt:TTime):Boolean;
begin
MinInt := MinInt-1;
if (t>=MinInt) and (t<=MaxInt) then Result := true;
end;

Так тоже работает неправильно :
TestTime(StrToTime(01:00'),StrToTime('22:00'),StrToTime('03:00')) - Так возвращает правильно (возвращает true)
а
TestTime(StrToTime('21:00'),StrToTime('22:00'),StrToTime('03:00')) - Так не правильно (возвращает true)


kostan   (2004-11-17 08:09:00) [9]

а вообще подставляй дату к minInt (day-1) а к Maxint (day)


kostan   (2004-11-17 08:07:00) [10]

не знаешь дату? а как ты определил что  01:00>=22:00
однако условие правильно не выполняется!


Progh   (2004-11-17 08:02:00) [11]


>
>  [1] КаПиБаРа ©   (17.11.04 07:55)


Дело в том, что просто сравнить способом :

function TestTime(t,MinInt,MaxInt:TTime):Boolean;
begin
 if (t>=MinInt) and (t<=MaxInt) then Result := true
end;

я не могу, так как незнаю дату.

Логически 01:00 входит в интервал между 22:00 и 03:00, но дання ф-ия возвращает что не входит, так как условие 01:00>=22:00 не выполняется


КаПиБаРа   (2004-11-17 07:55:00) [12]

Progh   (17.11.04 7:51)
F1 - TDateTime


Наверх

Титульная страница Поиск, карта сайта Написать письмо