Главная страница
    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.47 MB
Время: 0.038 c
1-1101054614
Bobby Digital
2004-11-21 19:30
2004.12.05
Формы и ф-ции


4-1098160932
Sod
2004-10-19 08:42
2004.12.05
смена цвета фона приложения


1-1100784772
aglar
2004-11-18 16:32
2004.12.05
Как запустить exe файл?


4-1098694249
Wolffgang
2004-10-25 12:50
2004.12.05
Серийник винта.


8-1094027799
Ольга
2004-09-01 12:36
2004.12.05
Создание ICO из BMP с прозрачным фоном





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский