Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

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

 
Progh   (2004-11-17 07:51) [0]

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


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

Progh   (17.11.04 7:51)
F1 - TDateTime


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


>
>  [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 не выполняется


 
kostan ©   (2004-11-17 08:07) [3]

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


 
kostan ©   (2004-11-17 08:09) [4]

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


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


>  [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)


 
begin...end ©   (2004-11-17 08:30) [6]


> [5] Progh   (17.11.04 08:20)


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

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


 
begin...end ©   (2004-11-17 08:32) [7]

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


 
kostan ©   (2004-11-17 08:35) [8]

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


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


> преобразуй 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)


 
begin...end ©   (2004-11-17 09:08) [10]


> [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. Если что не так, то извиняйте, я ещё не проснулся.


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

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
1-1101112928
Vn
2004-11-22 11:42
2004.12.05
Значение max высоты формы во время ее создания.


14-1100784354
panov
2004-11-18 16:25
2004.12.05
Наша судебная система начинает равняться на остальной мир?


14-1100235248
ИМХО
2004-11-12 07:54
2004.12.05
Ниггериец в составе сборной Украины?


14-1100579946
ocean
2004-11-16 07:39
2004.12.05
Windows Messenger


8-1094150415
AKM
2004-09-02 22:40
2004.12.05
Чем можно avi шки проигрывать, кроме TMediaPlayer a ?