Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zwei Uhrzeiten vergleichen? (https://www.delphipraxis.net/66753-zwei-uhrzeiten-vergleichen.html)

smart 3. Apr 2006 18:25


Zwei Uhrzeiten vergleichen?
 
Wie kann ich bei dem Vergleich zweier Uhrzeit, eine Dauer von 20 Sekunden hinzufügen. Beispiel: 17:55:10 soll ein Ereignis ausgeführt werden, aber 20 Sekunden lang.
Delphi-Quellcode:
If (TimeToStr(Now) > '17:55:10' ) And (TimeToStr(Now) < '17:55:10' + '20' ) Then Button1Click(Sender);
Geht nicht.

Gruß
Heike

Luckie 3. Apr 2006 18:28

Re: Zwei Uhrzeiten vergleichen?
 
Zitat:

Geht nicht.
Ich habe zwar ein englisches Delphi, aber selbst das hat mir noch nie als Fehlermeldung: "Does not work" ausgegeben. Wenn du dir dei fehlermeldung mal in Ruhe durchliest kommst du vielleivht schon von alline drauf, warum das nicht geht.

himitsu 3. Apr 2006 18:59

Re: Zwei Uhrzeiten vergleichen?
 
'17:55:10' + '20'

Kann nicht funktionieren ... '17:55:10' + '20' ist nicht '17:55:30', sondern '17:55:1020' :zwinker:

ste_ett 3. Apr 2006 19:08

Re: Zwei Uhrzeiten vergleichen?
 
Delphi-Quellcode:
Now()
und
Delphi-Quellcode:
EncodeTime()
leisten hierbei gute Dienste. :)

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  OldTime, TimeDiff: TTime;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('ja');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if (Now >= (OldTime + TimeDiff)) then
    Button1Click(Button1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldTime := Now;
  TimeDiff := EncodeTime(0, 20, 0, 0);
end;

mschaefer 3. Apr 2006 19:32

Re: Zwei Uhrzeiten vergleichen?
 
Moin, Spätmoin zusammen,

Natürlich ist Stefan an der Lösung...

Zu Encode Time ein Copy aus der Hilfe:
Delphi-Quellcode:
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean;
So nun zum Beispiel mit EncodeTimw
Delphi-Quellcode:
     EncodeTime(0, 20, 0, 0);
Das generiert einen Wert von 20 Minuten, aber das Prinzip ist natürlich geklärt.
Delphi-Quellcode:
     EncodeTime(0, 0, 20, 0);
So kommt es auf die 20 Sekunden.


Viele Grüße in die Runde // Martin

negaH 3. Apr 2006 20:11

Re: Zwei Uhrzeiten vergleichen?
 
Delphi-Quellcode:

Diff := Frac(Now) - EncodeTime(17, 55, 20);
if (Diff >= 0) and (Diff < 20 / 86400) then
Ein TDateTime ist eine Fließkommazahl mit Datum im Vorkommateil und Uhrzeit als Bruchteile eines Tages im Nachkommateil. Ein Tag hat 24 Stunden * 60 Minuten * 60 Sekunden == 86400. 20 / 86400 ist also exakt der Bruchteil eines Tages der 20 Sekunden darstellt.

Gruß Hagen

smart 4. Apr 2006 09:06

Re: Zwei Uhrzeiten vergleichen?
 
Vielen Dank, für Euren zahlreichen Antworten. Ich habe das Ganze jetzt so gelöst:

Delphi-Quellcode:
Var
ZielTime, Diff: TTime;
. . .
ZielTime := StrToTime('10:00:00');
. . .
Diff := Frac(Now) - ZielTime;
if (Diff >= 0) and (Diff < 20 / 86400) then . . .;
Gruß
Heike

Thanatos81 4. Apr 2006 09:18

Re: Zwei Uhrzeiten vergleichen?
 
Kleiner Tipp noch am Rande. Benutze nach Möglichkeit lieber EncodeTime, als StrToTime. StrToTime benutzt nämlich afair die Ländereinstellungen des Systems, und bei mir wäre 10:00:00 momentan 10:00:00 am. Daher würde dein Code auf meinem System zu einer Fehlermeldung führen, EncodeTime dagegen nicht ;-)

smart 4. Apr 2006 09:56

Re: Zwei Uhrzeiten vergleichen?
 
Zitat:

Zitat von Thanatos81
Kleiner Tipp noch am Rande. Benutze nach Möglichkeit lieber EncodeTime, als StrToTime. StrToTime benutzt nämlich afair die Ländereinstellungen des Systems, und bei mir wäre 10:00:00 momentan 10:00:00 am. Daher würde dein Code auf meinem System zu einer Fehlermeldung führen, EncodeTime dagegen nicht ;-)

Guter Tipp, nur wie kann ich EncodeTime in einer Datei speichern?

Gruß
Heike

negaH 4. Apr 2006 10:13

Re: Zwei Uhrzeiten vergleichen?
 
Einfach den TDateTime Wert speichern. TDateTime = type Double, also eine stinknormale Fließkommazahl.

Andererseits bin ich mir da nicht so sicher das StrToDateTime() wirklich auf die aktuellen MEZ Einstellugen des Systemes reagiert ?! Du solltest die Aussage von "smart" nochmal genauer überprüfen.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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