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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2015, 15:00   #1
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию Вычеслить время между двумя датами в цикле

Доброе время суток! Нужна помощь! Есть два списка, нужно получить итоговый список в котором разница во времени между исходными списками больше 4 четырех часов!
Код:
procedure TForm1.btn3Click(Sender: TObject);
var i,j:Integer;
s1,s2,q:TDateTime;
begin
    for  i:= 0 to lst1.Items.Count-1 do
      s1:=StrToDateTime(lst1.Items.Strings[i]);
          for  j:= 0 to lst2.Items.Count-1 do
             begin
 
              s2:=StrToDateTime(lst2.Items.Strings[j]);
 
               if s2>s1 then
                  begin
                  q := HoursBetween(s2,s1);
                  if (Trunc(q)>4) and (Trunc(q)<>0)  then
                  lst3.Items.Add(floatToStr(q)+' s2>s1 '+datetimetostr(s2))
                  end
 
                  else
 
                  begin
                   q := HoursBetween(s1,s2);
                   if (Trunc(q)<4) and (Trunc(q)<>0)  then
                   lst3.Items.Add(floatToStr(q)+' s1>s2 '+datetimetostr(s1))
 
 
                  end;
             end;
 
end;
Вложения
Тип файла: rar help.rar (171.5 Кб, 8 просмотров)

Последний раз редактировалось Stilet; 14.05.2015 в 15:30.
alex89d вне форума Ответить с цитированием
Старый 14.05.2015, 15:09   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
begin
 for i:= 0 to lst1.Items.Count-1 do
 begin//здесь добавил
 s1:=StrToDateTime(lst1.Items.String s[i]);
 for j:= 0 to lst2.Items.Count-1 do
 begin

 s2:=StrToDateTime(lst2.Items.String s[j]);

 if s2>s1 then
 begin
 q := HoursBetween(s2,s1);
 if (Trunc(q)>4) and (Trunc(q)<>0) then
 lst3.Items.Add(floatToStr(q)+' s2>s1 '+datetimetostr(s2))
 end

 else

 begin
 q := HoursBetween(s1,s2);
 if (Trunc(q)>4){здесь подкорректировал} and (Trunc(q)<>0) then
 lst3.Items.Add(floatToStr(q)+' s1>s2 '+datetimetostr(s1))


 end;
 end;//здесь добавил
 end;
Угадал?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 14.05.2015 в 15:47. Причина: Не всегда выделяет красным цветом (почему-то)
newerow1989 вне форума Ответить с цитированием
Старый 14.05.2015, 15:37   #3
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

Не угадал) не работает!((((
alex89d вне форума Ответить с цитированием
Старый 14.05.2015, 15:45   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

У меня так:
Изображения
Тип файла: jpg Безымянный.jpg (81.0 Кб, 117 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.05.2015, 15:47   #5
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

почему не работает? не вносит дат вообще или слишком много дат? или вообще ошибку дает?
пробовал дебажить, взять 2 даты заведомо подходящие под условия и смотреть, где условие не так работает?
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 14.05.2015, 15:55   #6
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

Когда беру по отдельности даты, условие срабатывает корректно! В цикле же вываливается много лишнего и не соответствующего условию! Первая цифра в итоговом списке, разность двух дат, но оно, не везде правильная, где может быть ошибка, что я делаю не так?(((
alex89d вне форума Ответить с цитированием
Старый 14.05.2015, 16:00   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Если построчно, то так:
Код:
procedure TForm1.btn3Click(Sender: TObject);
var i,j:Integer;
s1,s2,q:TDateTime;
begin
    for  i:= 0 to lst1.Items.Count-1 do
    begin
      s1:=StrToDateTime(lst1.Items.Strings[i]);
      s2:=StrToDateTime(lst2.Items.Strings[i]);

               if s2>s1 then
                  begin
                  q := HoursBetween(s2,s1);
                  if (Trunc(q)>4) and (Trunc(q)<>0)  then
                  lst3.Items.Add(floatToStr(q)+' s2>s1 '+datetimetostr(s2))
                  end

                  else

                  begin
                   q := HoursBetween(s1,s2);
                   if (Trunc(q)>4) and (Trunc(q)<>0)  then
                   lst3.Items.Add(floatToStr(q)+' s1>s2 '+datetimetostr(s1))


                  end;
    end;

end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.05.2015, 16:08   #8
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

Так действительно получше)))) Спасибо!)
alex89d вне форума Ответить с цитированием
Старый 14.05.2015, 16:10   #9
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Пожалуйста!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти разницу между двумя датами, а результат записать в письменном виде, так чтобы было согласование между падежами KatanaZh Microsoft Office Excel 15 27.11.2012 00:11
число часов между двумя датами Azart11 Общие вопросы C/C++ 13 06.10.2012 15:26
Как между двумя датами определить время бодрствования? Dux Общие вопросы Delphi 14 16.09.2010 14:41
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09