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

Вниз

Поиск наиближнего времени к текущему из списка   Найти похожие ветки 

 
__DATA__   (2005-09-22 13:17) [0]

Есть список :
09:00
15:00
18:00
21:00
00:00
03:00
06:00

Текущее время скажем 22:30. Как найти время из списка, наиболее близкое к 22:300, тоесть как найти 00:00?


 
КаПиБаРа ©   (2005-09-22 13:21) [1]

1. Написать функцию определяющую разность двух времен.
2. Найти минимальную разность между данным временем и всеми временами из массива.


 
__DATA__   (2005-09-22 13:23) [2]

Я написал :

function FindShotTime(Times: TStringList; Time: TDateTime): String;
var
 i: Integer;
 t,t2: TDateTime;
begin
 t := 999999999999;
 Time := StrToDateTime(FormatDateTime("01.01.2005 hh:mm",Time));
 for i := 0 to Times.Count-1 do
 begin
   t2 := StrToDateTime(FormatDateTime("01.01.2005 hh:mm",StrToDateTime(Times.Strings[i])));
   if (Time-t2) < t then
   begin
     Result := DateTimeToStr(t2);
     t := (Time-t2);
     if t < 0 then
       t := t*(-1);
   end;
 end;
end;


Только что делать с переходом да следуюший день?


 
Prohodil Mimo ©   (2005-09-22 13:23) [3]

Что то наподобие пузырьковой сортировки


 
Prohodil Mimo ©   (2005-09-22 13:26) [4]

Если нет дат, то врят ли получится.
Или список всё-таки упорядочен по времени?


 
Prohodil Mimo ©   (2005-09-22 13:27) [5]

__DATA__   (22.09.05 13:17)
время  день
09:00   1
15:00   1
18:00   1
21:00   1
00:00   2
03:00   2
06:00   2
 

так?


 
__DATA__   (2005-09-22 13:28) [6]


>  [4] Prohodil Mimo ©   (22.09.05 13:26)
> Если нет дат, то врят ли получится.


Нет, ничего невозможного! Я уверен что можно, только че-то сообразить немогу ...


> Или список всё-таки упорядочен по времени?


Нет, список не упорядочен


 
DelphiN! ©   (2005-09-22 13:31) [7]


>  [5] Prohodil Mimo ©   (22.09.05 13:27)


Так, только записи могут идти совершенно не в этом порядке, например :

06:00   2  
15:00   1
00:00   2
18:00   1
09:00   1
21:00   1
03:00   2


 
КаПиБаРа ©   (2005-09-22 13:32) [8]

КаПиБаРа ©   (22.09.05 13:21) [1]
1.1. Написать функцию StrToDt перевода времени из строкового формата 22:30 в формат TDateTime
1.2. Написать функцию определения разности
A(D, TimeFromMassiv: TDateTime): Double;
begin
 Result := Min(Abs(D-TimeFromMassiv), Abs(D-TimeFromMassiv+1))
end;


 
DelphiN! ©   (2005-09-22 13:39) [9]

[8] КаПиБаРа ©   (22.09.05 13:32)

ага, вот что получится :


function FindShotTime(Times: TStringList; Time: TDateTime): String;
var
 i: Integer;
 t,t2: TDateTime;
begin
 t := 999999999999;
 Time := StrToDateTime(FormatDateTime("01.01.2005 hh:mm",Time));
 for i := 0 to Times.Count-1 do
 begin
   t2 := StrToDateTime(FormatDateTime("01.01.2005 hh:mm",StrToDateTime(Times.Strings[i])));
   if Min(Abs(Time-t2), Abs(Time-(t2+1))) < t then
   begin
     Result := DateTimeToStr(t2);
     t := (Time-t2);
     if t < 0 then
       t := t*(-1);
   end;
 end;
end;


 
Prohodil Mimo ©   (2005-09-22 13:41) [10]

__DATA__   (22.09.05 13:28) [6]
Нет, ничего невозможного!


согласен. Но... ещё раз спрашиваю : тебе известно только время или дата? если дата не известна, то как ты определишь что 10:00 были вчера, а не сегодня?


 
__DATA__   (2005-09-22 13:44) [11]

[10] Prohodil Mimo ©   (22.09.05 13:41)
Извесно только время.
Мне всеравно вчера это или сегодня, главное чтобы найти наиболее близкую точку к текущему времени, а найти так :

> [9] DelphiN! ©   (22.09.05 13:39)


 
raymond ©   (2005-09-22 14:49) [12]


> КаПиБаРа ©   (22.09.05 13:21) [1]
>
> 1. Написать функцию определяющую разность двух времен.
> 2. Найти минимальную разность между данным временем и всеми
> временами из массива.


Согласен


 
Prohodil Mimo ©   (2005-09-22 14:56) [13]

__DATA__   (22.09.05 13:44) [11]
Извесно только время.
Мне всеравно вчера это или сегодня


тогда не понятен смысл приведения к DateTime,
а так же к чему был вопрос

> Только что делать с переходом да следуюший день?


 
isasa ©   (2005-09-22 15:55) [14]

> Только что делать с переходом да следуюший день?

Учесть, что
24:00==00:00


 
esu ©   (2005-09-22 17:32) [15]

IMHO приводить к TDateTime смысла нет. Быстрее будет притвориться integer и сравнивать 2100 с 2330 ну и далее по списку :)


 
esu ©   (2005-09-22 17:33) [16]

сорри торможу ;)



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

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

Наверх




Память: 0.5 MB
Время: 0.026 c
14-1127567220
NewWonder
2005-09-24 17:07
2005.10.16
Помогите с переводом фразы


2-1127214444
FBI Agent
2005-09-20 15:07
2005.10.16
Print DBGrid


14-1127833083
Gorger
2005-09-27 18:58
2005.10.16
Что бы это могло означать,помогите тупому.


5-1100270416
SergV
2004-11-12 17:40
2005.10.16
Свойство Transperent в компоненте Panel.


14-1124894682
Marser
2005-08-24 18:44
2005.10.16
Опрос: Студенты и работа.