![]() |
Zeitdifferenz "ordentlich" formatiert darstellen
Hi @all
ich hab da mal eine Frage zu dem TDateTime-Format. Und zwar habe ich folgendes Problem: Ich habe eine Zeitdifferenz (natürlich auch von zwei Zeiten) im Format TDateTime. Nun möchte ich diese Zeit je nachdem ob sie größer als 59 Sekunden ist,59Minuten 23Stunden... usw. auswerten. Viele sagen jetzt MinutesBetween,SecondsBetween usw. nur das hilft. An einem Beispiel erklärt: Die erste Zeit: 12:03:24 (hh:mm:ss:) Die zweite Zeit: 14:27:54 (hh:mm:ss:) Zeitdifferenz: 02:24:30 (hh:mm:ss) (ich hoffe ich habe richtig gerechnet :-) ) Jetzt kann die Zeitdifferenz aber auch größer als Stunden sein... Beispiel: Zeit1: 12.03. 11:22:33 (dd.mm. hh:mm:ss) Zeit2: 14.03. 12:33:44 (dd.mm. hh:mm:ss) Zeitdifferenz: 02 01:11:11 (dd hh:mm:ss) (Die Formatierung wie was aussieht erstmal ausgeschlossen...) Wisst ihr wie ich das mache? Aus einer Zeitdifferenz zu analysieren wie groß der Unterschied ist (Sekunden,Minuten,Stunden,Tage...) und das dann dementsprechend darzustellen. Ich hoffe ihr könnt mir da helfen MFG Alex |
Re: Zeitdifferenz "ordentlich" formatiert darstell
Delphi-Quellcode:
hier nen aussschnitt aus nem code den ich mal in nem projekt benutzt hatte... und nen coutdown anzuzeigen und wenn er die differenz <= 0 ist dann zeigt er "running" an.
procedure TfrmScriptEvents.tmrRunningTimer(Sender: TObject);
const sDay = 60 * 60 * 24; sHour = 60 * 60; sMin = 60; var xSecs : Integer; xMins : Integer; xHours: Integer; xDays : Integer; begin xSecs := Abs(SecondsBetween(Now, fNextRun)); xDays := xSecs div sDay; xHours := (xSecs - xDays * sDay) div sHour; xMins := (xSecs - xDays * sDay - xHours * sHour) div sMin; xSecs := xSecs - xDays * sDay - xHours * sHour - xMins * sMin; if (xDays > 0) or (xHours > 0) or (xMins > 0) or (xSecs > 0) then lblNextRun.Caption := Format('%d + %.2d:%.2d:%.2d', [xDays, xHours, xMins, xSecs]) else begin lblNextRun.Caption := 'Running'; FormShow(Self); //update end; end; paresy |
Re: Zeitdifferenz "ordentlich" formatiert darstell
danke für den source.
Ich wollte dich mal fragen @paresy, ob ich den code noch auf monate und jahre erweitern kann? MFG Alex |
Re: Zeitdifferenz "ordentlich" formatiert darstell
z.B.
Delphi-Quellcode:
Bei Monaten und Jahren ist es ein bissl schwerer genauere Angaben, zu den kleineren Einteilungen zu machen, da 1 Jahr/1 Monat nunmal keine feste Anzahl an Tagen/Stunden... hat.
If YearsBetween(Zeit1, Zeit2) <> 0 Then
S := IntToStr(YearsBetween(Zeit1, Zeit2)) + ' Jahre' Else If MonthsBetween(Zeit1, Zeit2) <> 0 Then S := IntToStr(MonthsBetween(Zeit1, Zeit2)) + ' Monate' Else If WeeksBetween(Zeit1, Zeit2) <> 0 Then S := IntToStr(WeeksBetween(Zeit1, Zeit2)) + ' Wochen ' + IntToStr(Round(Abs(Zeit) - WeeksBetween(Zeit1, Zeit2) * 7)) + ' Tage' Else If DaysBetween(Zeit1, Zeit2) <> 0 Then S := IntToStr(DaysBetween(Zeit1, Zeit2)) + ' Tage ' + TimeToStr(Abs(Zeit) - DaysBetween(Zeit1, Zeit2)) Else S := TimeToStr(Abs(Zeit1 - Zeit2)); |
Re: Zeitdifferenz "ordentlich" formatiert darstell
danke himitsu...
ich konnte mir schon denken das es problematisch wird weil Monat und Jahr wie du schon sagtest, nicht immer die gleiche Anzahl von Tagen haben. Aber trotzdem danke MFG Alex |
Re: Zeitdifferenz "ordentlich" formatiert darstell
@himitsu:
die Variable zeit, welche muss das sein? Zeit1 oder Zeit2? :gruebel: MFG Alex |
Re: Zeitdifferenz "ordentlich" formatiert darstell
Zitat:
hallo, ehm könnte mier bitte einer erklären wie er das hin bekommen hat solch eine zeitdifferenz? ich bekomme nur folgendes hin... z.B.: Zeit1 : 14:00:00 Zeit2 : 15:00:00 Differenz : 23:00:00 |
Re: Zeitdifferenz "ordentlich" formatiert darstell
Wie ermittelst Du denn die Differenz?
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: Zeitdifferenz "ordentlich" formatiert darstell
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz