AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitdifferenz berechen

Ein Thema von BeerBear · begonnen am 25. Nov 2005 · letzter Beitrag vom 30. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#1

Zeitdifferenz berechen

  Alt 25. Nov 2005, 14:46
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.
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 14:52
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 ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 14:53
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
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#4

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 15:16
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
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?
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#5

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 15:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 15:58
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Zeitdifferenz berechen

  Alt 25. Nov 2005, 16:21
Hallo Beerbear,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von BeerBear
BeerBear

Registriert seit: 23. Aug 2005
Ort: Lübeck
85 Beiträge
 
#8

Re: Zeitdifferenz berechen

  Alt 28. Nov 2005, 08:49
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.
Der Fehler sitzt immer vor dem Bildschirm.
  Mit Zitat antworten Zitat
GreatFlo

Registriert seit: 14. Dez 2005
Ort: Münsterland
2 Beiträge
 
#9

Re: Zeitdifferenz berechen

  Alt 15. Dez 2005, 20:00
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Zeitdifferenz berechen

  Alt 15. Dez 2005, 21:20
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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