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

Вниз

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

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

Наверх




Память: 0.48 MB
Время: 0.057 c
8-1116800582
ALL
2005-05-23 02:23
2005.10.16
Звуковой поток


14-1127395657
Kot Andrei
2005-09-22 17:27
2005.10.16
Соломон и Руссинович


14-1127710725
Ega23
2005-09-26 08:58
2005.10.16
С днем рождения! 26 сентября


2-1126849897
worldmen
2005-09-16 09:51
2005.10.16
Полноэкранный режим


2-1126604840
SMATMP
2005-09-13 13:47
2005.10.16
Hint&amp;ShowHint





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