![]() |
Zeitdifferenz berechen
Moin,
Ich habe folgendes Problem: Ich möchte die Zeitdifferenz zwischen 2 Zeiten vom Typ TDateTime berechnen. Als Differenz sollte die Zeit im Fomat hh:mm:ss ausgegeben werden. Hat jemand nen Tip? Danke im voraus. |
Re: Zeitdifferenz berechen
Delphi-Quellcode:
Für die Ausgabe kannst du alles verwenden, was du willst, z.B. TimeToString, oder dir Delphi noch so bietet. (bei einigen Funktionen kannst du auch direkt das Format angeben ... dazu findest du genug in der OH)
Var Zeit1, Zeit2, Differenz: TDateTime
Differenz := Zeit1 - Zeit2; //oder wenn du nur die reine Differenz, ohe einen Hinweis was früher/später liegt haben möchtest, dann: Differenz := Abs(Zeit1 - Zeit2); [add] Danke Matze ... mir fiehl gerade der Name nicht ein ^^ |
Re: Zeitdifferenz berechen
Zitat:
![]() |
Re: Zeitdifferenz berechen
Auf die Idee Zeit1 - Zeit2 bin ich auch schon gekommen.
Als Ergebnis gibts allerdings den 30.12.1899 + die Zeitdifferenz. Wenn ich das Ganze mit
Delphi-Quellcode:
mache, bekomme ich nur die Differenz der Uhrzeit. Auch wenn Tage dazwischen liegen. Es wird also nur das Datum abgeschnitten.
FormatDateTime('hh:nn:ss', Zeit1 - Zeit2)
Wie komme ich aber an die eigentliche Zeitdifferenz? Gibts da auch fertige Funktionen? Oder muss ich die Zeit selbst zerlegen, den gerundeten Gleitkommawert mit 24 multiplizieren und zum Stundenwert addieren? |
Re: Zeitdifferenz berechen
In der Unit DateUtils gibt es auch noch die folgenden Funktionen:
function HoursBetween(const ANow, AThen: TDateTime): Int64; function MinutesBetween(const ANow, AThen: TDateTime): Int64; function SecondsBetween(const ANow, AThen: TDateTime): Int64; Vielleicht helfen die dir weiter. Daraus kannst du dann relativ einfach das von dir gewünschte Ergebnis zusammenbasteln. |
Re: Zeitdifferenz berechen
z.B.:
Delphi-Quellcode:
D := Abs(Zeit1 - Zeit2);
S := FormatDateTime('hh:nn:ss', Zeit1 - Zeit2); If D >= 1 Then S := IntToStr(Trunc(D)) + ' Tage ' + S; |
Re: Zeitdifferenz berechen
Hallo Beerbear,
vielleicht löst diese Routine aus einem anderen thread dein Problem: ![]() Grüße vom marabu |
Re: Zeitdifferenz berechen
Danke für die zahlreichen Antworten, aber ich hab mir bereits eine ähnliche Lösung gebastelt, wie himitsu sie vorgeschlagen hat.
Die DateUtils scheinen bei mir nicht vorhanden zu sein. |
Re: Zeitdifferenz berechen
Also ich habe jetzt folgendes:
Delphi-Quellcode:
Funktioniert soweit... wie zeige ich nun noch das Datum an? Einfach den 1. Paramter bei FormatDT abwandeln?
unit Timer;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, DateUtils; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Label3: TLabel; DerTimer: TTimer; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure DerTimerTimer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Zeit1 : TDateTime; Zeit2 : TDateTime; D : TDateTime; S : String; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.FormCreate(Sender: TObject); begin DerTimer.Enabled := True; Zeit1 := EncodeDate(2005, 12, 14)+EncodeTime(19, 8, 0, 0); Zeit2 := Date+Time; end; procedure TForm1.DerTimerTimer(Sender: TObject); begin D := Abs(Zeit1 - Zeit2); S := FormatDateTime('hh:nn:ss', Zeit1 - Zeit2); If D >= 1 Then S := IntToStr(Trunc(D)) + ' Tage ' + S; Label1.Caption := FormatDateTime('hh:nn:ss', Zeit1); Label2.Caption := FormatDateTime('hh:nn:ss', Zeit2); Label3.Caption := S; end; end. Naja das Hauptproblem: Aus irgendeinem Grund funktioniert mein Timer nicht... zeigt es einmal an aber aktualisiert dann nicht mehr... oder nur einfach ändert sich da nix!? O.o |
Re: Zeitdifferenz berechen
Hallo GreatFlo,
der Timer funktioniert schon, aber du verwendest ihn wohl falsch. Du hast zwei Zeiten, eine Referenzzeit Zeit1 und eine laufende Zeit (Zeit2 = Now). Im Timer musst du natürlich die Zeit2 auch laufen lassen, sonst siehst du nichts:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.FormCreate(Sender: TObject);
begin Zeit1 := EncodeDate(2005, 12, 14) + EncodeTime(19, 8, 0, 0); DerTimer.Enabled := True; end; procedure TForm1.DerTimerTimer(Sender: TObject); begin D := Abs(Now - Zeit1); S := FormatDateTime('hh:nn:ss', Now - Zeit1); If D >= 1 Then S := IntToStr(Trunc(D)) + ' Tage ' + S; Label1.Caption := FormatDateTime('hh:nn:ss', Zeit1); Label2.Caption := FormatDateTime('hh:nn:ss', Now); Label3.Caption := S; end; |
Re: Zeitdifferenz berechen
Also ich mache das so:
Delphi-Quellcode:
Obwohl.. Ich glaube FormatDateTime ist ganz praktisch... ich probier das mal damit^^
uses DateUtils;
procedure TForm1.FormActivate(Sender: TObject); var Tage,Stunden,Minuten,Sekunden: Integer; begin // DateTimePicker muss auf 01.01.2006 00:00:00 gestellt sein. repeat Tage := DaysBetween(Now,DateTimePicker1.Date); Stunden := HoursBetween(Now,DateTimePicker1.Date) - (Tage*24); // Bzw (DaysBetween(Now,DateTimePicker1.Date)*24); Minuten := MinutesBetween(Now,DateTimePicker1.Date) - (HoursBetween(Now,DateTimePicker1.Date)*60); Sekunden := SecondsBetween(Now,DateTimePicker1.Date) - (MinutesBetween(Now,DateTimePicker1.Date)*60); Label1.Caption := 'Noch ' + IntToStr(Tage) + ' Tag(e) und ' + IntToStr(Stunden) + ' Stunde(n) und ' + IntToStr(Minuten) + ' Minute(n) und ' + IntToStr(Sekunden) + ' Sekunde(n)!'; Application.ProcessMessages; until Application.Terminated; end; Ok marabus ist tausendmal kürzer und unkomplizierter ^^ Hab grade ein paar Vorzüge von FormatDateTime kennengelernt :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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