Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit Zeitangabe (https://www.delphipraxis.net/159212-problem-mit-zeitangabe.html)

Chaosritter 18. Mär 2011 12:17

Problem mit Zeitangabe
 
Hallo zusammen,
Ich bin gerade dabei ein Projekt zuschreiben. Dabei möchte ich eine Zeit mit TTime ausgeben, die größer wie 24h ist. Ich habe hier im Forum schon bestimmte Artikel gelsesen, die mir aber entweder bei der Lösungsfindung nicht weiter geholfen haben oder ich verstehe die angebotene Lösung nicht. Ihr müsst wissen, dass ich ein blutiger Anfänger bin. :-D :-D :-D
Hier erstmal der betreffende Programmteil
Delphi-Quellcode:
if StrToTime(Edit1.Text) < StrToTime(Edit5.Text) then
begin
  Flugzeit := StrToTime(Edit1.Text) - StrToTime(Edit5.Text);
  Listbox8.Items.add(TimeToStr(Flugzeit));
  Gesamtflugzeit:= Gesamtflugzeit + Flugzeit;
  Listbox22.Items.clear;
  Listbox22.Items.Add(timetostr(Gesamtflugzeit));
 end;

if StrToTime(Edit1.Text) > StrToTime(Edit5.Text) then
begin
  Flugzeit:= 24 - (StrToTime(Edit1.Text) - StrToTime(Edit5.Text));
  Listbox8.Items.add(TimeToStr(Flugzeit));
  Gesamtflugzeit:= Gesamtflugzeit + Flugzeit;
  Listbox22.Items.clear;
  Listbox22.Items.Add(timetostr(Gesamtflugzeit));
end;
end;
Bei dem Programm geht es darum Gesamtflugzeiten eines Flugtages auszurechnen. Da aber mehrere Flugzuge gleichzeitig fliegen können, kann diese >24h werden. =)

Ich bitte nun also um konkrete Hilfe (bezogen auf unser Programm), wie die Zeit bieliebig weit weiter gezählt wird und nicht bei 24:00 wieder auf 0:00 springt.

Danke im Vorraus.

Gruß

Chaosritter

Billa 18. Mär 2011 12:34

AW: Problem mit Zeitangabe
 
Überprüfe doch mal Deine Einstellungen bzgl Zeitformat! TimeToStr wertet standardmässig m.E. nur den Nachkommaanteil eines TDateTime aus. Ggf musst Du Vorher den Vorkommaanteil abtrennen.

Bbommel 18. Mär 2011 13:16

AW: Problem mit Zeitangabe
 
Mir ist von Delphi aus keine Funktion bekannt, die dir einen TTime oder TDateTime-Wert in ein Format hh:mm umwandeln würde, bei dem die Stunden >24 sein dürfen.

Das wirst du also schon selber umrechnen müssen. Ist aber eigentlich kein Problem - du solltest nur wissen, dass du, wenn du mit TTime oder TDateTime arbeitest, letztlich in deiner Differenz-Variable nichts anderes stehen hast, als die Differenz in Tagen.

Nehmen wir an, du hast
Code:
flugzeit = 1.5
Also eine Flugzeit von 1,5 Tagen. Um auf die Stunden zu kommen, nimmst du den Wert einfach *24:
Delphi-Quellcode:
flugStunden:=trunc(flugzeit*24)

Mit "trunc" wird dabei abgerundet, so dass du immer nur die ganzen Stunden erhälst (hier ist es natürlich immer 36 Stunden, weil 1,5 Tage nun mal genau passt). Nun darfst du noch ein bisschen knobeln, wie du an die Minuten kommst. :) Hierzu musst du dir den Restwert angucken, der übrig bleibt, wenn man von der gesamten Flugzeit die bisher ermittelten vollen Stunden abzieht, diesen Restwert *24*60 nehmen und du hast deine Minuten.

Ich hoffe, das hilft dir erst mal weiter.

Bis denn
Bommel

stahli 18. Mär 2011 14:01

AW: Problem mit Zeitangabe
 
Ich habe drei ältere Funktionen, um Zeininformationen anzuzeigen (Stunden, Tage Minuten usw).
Falls das hilft:

Delphi-Quellcode:
unit ssTimes;

interface

function BeforeTimeString(DT: TDateTime): String;
function DateTimeDurationString(DT: TDateTime; DifFlag, NullFlag, HourFlag, SecondFlag: Boolean): String;
function SecondDurationString(Sec: Integer; DifFlag, NullFlag: Boolean): String;

implementation

uses
  SysUtils;

function BeforeTimeString(DT: TDateTime): String;
var
  Hour, Min, Sec, MSec: Word;
  N, Dif: TDateTime;
  D, H: TDate;
  T: Word;
  S: String;
begin
  S := '';
  if DT > 0 then
  begin
    N := Now;
    D := TDate(DT);
    H := TDate(N);
    T := Trunc(H) - Trunc(D);
    Dif := N - DT;
    if Dif <= StrToTime('6:00:00') then
    begin
      DecodeTime(Dif, Hour, Min, Sec, MSec);
      if Hour > 0 then
        S := 'vor ' + FormatDateTime('h:nn', Dif) + ' h'
      else
      if Min > 0 then
        S := 'vor ' + FormatDateTime('n', Dif) + ' min'
      else
      if Sec > 1 then
        S := 'vor ' + FormatDateTime('s', Dif) + ' sec'
      else
        S := 'jetzt';
    end
    else
    begin
      case T of
        0: S := 'heute';
        1: S := 'gestern';
        2: S := 'vorgestern';
        else
          S := 'vor ' + IntToStr(T) + ' Tagen';
      end;
    end;
  end;
  Result := S;
end;

function DateTimeDurationString(DT: TDateTime; DifFlag, NullFlag, HourFlag, SecondFlag: Boolean): String;
var
  Tage, Hour, Min, Sec, MSec: Word;
  N, Dif: TDateTime;
  S: String;
begin
  S := '';
  if DifFlag then
  begin
    N := Now;
    if DT > N then
      Dif := DT - N
    else
      Dif := 0;
  end
  else
  begin
    if DT > 0 then
      Dif := DT
    else
      Dif := 0;
  end;
  if (Dif <> 0) or (NullFlag) then
  begin
    Tage := Trunc(Dif);
    DecodeTime(Dif, Hour, Min, Sec, MSec);
    if (Tage = 0) or (HourFlag) then
    begin
      if Hour > 0 then
      begin
        if SecondFlag then
          S := FormatDateTime('hh:nn:ss', Dif) + ' h'
        else
          S := FormatDateTime('hh:nn', Dif) + ' h';
      end
      else
      if Min > 0 then
      begin
        if SecondFlag then
          S := FormatDateTime('nn:ss', Dif) + ' min'
        else
          S := FormatDateTime('n', Dif) + ' min';
      end
      else
      begin
        if SecondFlag then
          S := FormatDateTime('ss', Dif) + ' sec'
        else
          S := '< 1 min';
      end;
    end;
    if Tage > 0 then
    begin
      if Dif - Tage = 0 then
        S := ''
      else
      if S <> '' then
        S := ', ' + S;
      if Tage = 1 then
        S := '1 Tag' + S
      else
        S := IntToStr(Tage) + ' Tage' + S;
    end;
  end
  else
    S := '';
  Result := S;
end;

function SecondDurationString(Sec:Integer;DifFlag,NullFlag:Boolean):String;
var
  DT: TDateTime;
begin
  DT := (Sec/60/60/24);
  Result := DateTimeDurationString(DT, DifFlag, NullFlag, True, True);
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz