Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2019, 20:19   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос работа с временем

Добрый вечер! Есть такой список временных промежутков:

13:24:49 - 14:27:42
16:07:14 - 16:07:26
18:25:13 - 18:38:14
20:16:50 - 20:57:58
21:04:05 - 22:43:40
23:59:26 - 23:59:59

нужно исходя из этого списка определить сколько секунд входит в каждый час суток (от 0 до 23).
например, в 10-й час входит 0 секунд, в 18-й 781 секунда, а в 23-й 33 секунды. помогите пожалуйста с кодом.

Последний раз редактировалось garuna; 16.05.2019 в 20:36.
garuna вне форума Ответить с цитированием
Старый 16.05.2019, 20:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от garuna Посмотреть сообщение
нужно исходя из этого списка определить сколько секунд входит в каждый час суток (от 0 до 23).
например, в 10-й час входит 0 секунд, в 18-й 781 секунда, а в 23-й 33 секунды. помогите пожалуйста с кодом.
простите, а как это Вы посчитали?
понял
18-й час входит 13 минут 1 секунда = 13*60+1 = 781
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2019, 20:54   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

StrToTime и
SecondsBetween из DateUtils
с учетом перехода между часами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2019, 20:59   #4
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
простите, а как это Вы посчитали?
понял
18-й час входит 13 минут 1 секунда = 13*60+1 = 781
да, всё верно.


Цитата:
Сообщение от Аватар Посмотреть сообщение
StrToTime и
SecondsBetween из DateUtils
с учетом перехода между часами
да я понимаю, что нужно оперировать этими функциями, но уже больше часа туплю в монитор и не могу сообразить как это сделать
garuna вне форума Ответить с цитированием
Старый 16.05.2019, 21:07   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

заведи массив [0..23] для секунд, индекс - час
в цикле по списку интервалов определяй час из начала интервала и час из конца. Если совпадает то вычисляй и накапливай в массиве. Если час конца больше часа начала то считай секунды до конца часа начала интевала и накапливай, в начало интервала вставь начало следующего часа и т.д
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2019, 22:33   #6
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
заведи массив [0..23] для секунд, индекс - час
в цикле по списку интервалов определяй час из начала интервала и час из конца. Если совпадает то вычисляй и накапливай в массиве. Если час конца больше часа начала то считай секунды до конца часа начала интевала и накапливай, в начало интервала вставь начало следующего часа и т.д
я мысленно всё это представляю, но не могу сообразить как выразить кодом. помоги, если не сложно
garuna вне форума Ответить с цитированием
Старый 19.05.2019, 11:17   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Memo1.Clear;
   Memo1.Lines.Add('13:24:49 - 14:27:42');
   Memo1.Lines.Add('16:07:14 - 16:07:26');
   Memo1.Lines.Add('18:25:13 - 18:38:14');
   Memo1.Lines.Add('20:16:50 - 20:57:58');
   Memo1.Lines.Add('21:04:05 - 22:43:40');
   Memo1.Lines.Add('23:59:26 - 23:59:59');
end;

procedure TForm1.Button1Click(Sender: TObject);
var sec:array[0..23] of integer;
    i,k:integer;
    s,s1,s2:string;
    t,t1,t2:tDateTime;
begin
   For k:=Low(sec) to High(sec) do
      sec[k]:=0;
   For i:=0 to Memo1.Lines.Count-1 do
   begin
      s:=Memo1.Lines[i];
      k:=Pos(' - ',s);
      s1:=Copy(s,1,k-1);//13:24:49
      s2:=Copy(s,k+3,Length(s));//14:27:42
      t1:=StrToTime(s1);
      t2:=StrToTime(s2);
      k:=Pos(':',s);
      s:=Copy(s,1,k-1);//13
      k:=StrToInt(s);
      Repeat
         t:=(k+1)/24;//14:00:00
         If t2<t then//14:27:42 < 14:00:00
            t1:=t2-t1 else
            t1:=t-t1;//0:35:11 = 14:00:00 - 13:24:49
         sec[k]:=sec[k]+Round(t1*24*60*60);
         If t2<t then
            Break;
         t1:=t;//14:00:00
         Inc(k);//14
      Until k>=24;
   end;
   Label1.Caption:='';
   For k:=Low(sec) to High(sec) do
      Label1.Caption:=Format('%s%d - %d%s',[Label1.Caption,k,sec[k],#13#10]);
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со временем apeorin Общие вопросы C/C++ 2 05.12.2012 18:22
Работа с временем. celovec Общие вопросы Delphi 7 08.04.2011 18:29
работа со временем серг Общие вопросы C/C++ 9 07.12.2010 21:03
Работа со временем A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2010 16:38
Работа со временем. ekzi Общие вопросы C/C++ 1 22.07.2008 15:29