Jak prawidłowo obliczyć sumę godzin?

0

Witam, piszę program w deplhi2010 z obsługą bazy PostgreSQL, stanąłem na formatce, na której chcę wyświeilić wyfiltrowane dane i sumy wierszy, problem polega, że suma kolumny paca_jazda (zmienna Date Time) zamiast prawidłowego wyniku 25:25 pokazuje 01:25, jakiej funkcji sumującej mogę użyć, lub jak prawidłowo zsumować wiersze w danej kolumny. Za pomoc z góry dziękuję

czas.jpg

1

jesteś pewien że to pole typu ftdateTime ? wg mnie jest typu ftTime, wskazuje na to format wyświetlania danych w gridzie, i dlatego 25 h i 25 min jest konwertowane na 1 h 25 min

1

przyjrzyj się czemuś co się nazywa TTimeSpan to powinno rozwiązać twój problem

1

Typy Tdate, TTime, TDateTime są tożsame z typem double gdzie część całkowita odpowiada za zapis dni, a ułamkowa godzin,minut,sekund,milisekund ... Czyli 2.00 to dwa dni, 2.50 - 2 dni 12 h .
Data jest zapisywana jako liczba dni licząc od 30.12.1899.
Stąd do obliczeń nieraz wygodniej jest traktować zmienne tych typów jako double.

np:

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TDateTime;
begin
  t := 0.5;
  ShowMessage(DateTimeToStr(t));
end;
0

Dziiękję za wszelką pomoc, ale zbyt słaby jestem bym sobie sa poradził.Jak to zapisać w kodzie

0

@janusz.p27111960:
pokaż jak wyliczasz sumę

0
procedure TForm5.Dopisz1Click(Sender: TObject);
var
a: TdateTIME;
begin
zquery2.filter:='dd=1 and mm=6 and rr=2019';
zquery2.Filtered:=true;
zquery2.First;
while not ZQuery2.Eof do
  begin
  a:=a+zquery2.FieldByName('praca_jazda').asDateTime;
  zquery2.Next;
  end;

maskedit1.text:=Format('%d:%s',[HourOf(a),FormatDateTime('nn',a)]);
maskedit2.text:=timetostr(a);
0

Funkcje konwertujące zmienną typu TTime do stringa nie wyświetlą ci nigdy godziny "25:25" ponieważ nie ma godziny 25. Godzina 25:25 to inaczej 1:25 następnego dnia.

0
Uses System.TimeSpam;

procedure Tmain.Button1Click(Sender: TObject);
var
  Razem: TTimeSpan;
  czas1, czas2: TTime;
begin
  czas1 := Now; // 23:00:00
  czas2 := Now; // 23:00:00
  Razem := TTimeSpan.Parse(TimeToStr(czas1)) + TTimeSpan.Parse(TimeToStr(czas2));
  ShowMessage(Format('%d:%.2d:%.2d', [Razem.Days * 24 + Razem.Hours, Razem.Minutes, Razem.Seconds])); // 46:00:00
end;
0

Wszystko fajnie a jak to zapisać w pętli dla np 10 wieszy

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0