Главная страница
    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.035 c
1-1100683669
OlegM
2004-11-17 12:27
2004.12.05
Как после вставки таблиыцы в ворде выйти из таблицы


8-1094407602
IRYS
2004-09-05 22:06
2004.12.05
Preview mode для ScreenSaver a


3-1099645317
Pavor
2004-11-05 12:01
2004.12.05
Как побороть "Directory is controlled by other .NET file"?


1-1100002576
Checist [root]
2004-11-09 15:16
2004.12.05
Событие скрола мыши


1-1101214540
Fatal
2004-11-23 15:55
2004.12.05
Проблемы выгрузки в Excel





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