Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeitdifferenz berechen (https://www.delphipraxis.net/57720-zeitdifferenz-berechen.html)

BeerBear 25. Nov 2005 14:46


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.

himitsu 25. Nov 2005 14:52

Re: Zeitdifferenz berechen
 
Delphi-Quellcode:
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);
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)


[add]
Danke Matze ... mir fiehl gerade der Name nicht ein ^^

Matze 25. Nov 2005 14:53

Re: Zeitdifferenz berechen
 
Zitat:

Zitat von himitsu
(bei einigen Funktionen kannst du auch direkt das Format angeben ... dazu findest du genug in der OH)

Siehe hierzu z.B. Delphi-Referenz durchsuchenFormatDateTime

BeerBear 25. Nov 2005 15:16

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:
FormatDateTime('hh:nn:ss', Zeit1 - Zeit2)
mache, bekomme ich nur die Differenz der Uhrzeit. Auch wenn Tage dazwischen liegen. Es wird also nur das Datum abgeschnitten.
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?

dfried 25. Nov 2005 15:40

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.

himitsu 25. Nov 2005 15:58

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;

marabu 25. Nov 2005 16:21

Re: Zeitdifferenz berechen
 
Hallo Beerbear,

vielleicht löst diese Routine aus einem anderen thread dein Problem: klick

Grüße vom marabu

BeerBear 28. Nov 2005 08:49

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.

GreatFlo 15. Dez 2005 20:00

Re: Zeitdifferenz berechen
 
Also ich habe jetzt folgendes:
Delphi-Quellcode:
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.
Funktioniert soweit... wie zeige ich nun noch das Datum an? Einfach den 1. Paramter bei FormatDT abwandeln?
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

marabu 15. Dez 2005 21:20

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:
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;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.
Seite 1 von 2  1 2      

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