Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
3-1099838464
ser_ega
2004-11-07 17:41
2004.12.05
Работа программы на другом компе!


14-1100354598
Piter
2004-11-13 17:03
2004.12.05
А можно в Object Inspector искать по первым буквам свойства?


14-1099338839
Piter
2004-11-01 22:53
2004.12.05
Составление нового FAQ для этого сайта


1-1100881842
VitGun
2004-11-19 19:30
2004.12.05
"Invalid pointer operation" при закрытии.


3-1099503672
MORA
2004-11-03 20:41
2004.12.05
Diagram page





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский