![]() |
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:
Bei dem Programm geht es darum Gesamtflugzeiten eines Flugtages auszurechnen. Da aber mehrere Flugzuge gleichzeitig fliegen können, kann diese >24h werden. =)
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; 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 |
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.
|
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:
Also eine Flugzeit von 1,5 Tagen. Um auf die Stunden zu kommen, nimmst du den Wert einfach *24:
flugzeit = 1.5
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 |
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 17:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz