Autor Beitrag
Plochinger
Hält's aus hier
Beiträge: 5


D7 Pers
BeitragVerfasst: Mo 29.08.05 20:47 
Hallo,
ich habe bereits die Suchfunktion benutzt und bin dadurch schon ein großes Stück weitergekommen, zu einem bestimmten Problem finde ich jedoch nichts, was sich darauf direkt übertragen ließe:

Ich habe eine procedure, die die Systemzeit in der Form 'hh:nn' ausliest und an eine Variable übergibt. Dann lese ich aus einer Datei eine zweite Uhrzeit in der gleichen Form aus. Nun schaffe ich es problemlos, die Systemzeit in einen String umzuwandeln und ein Ereignis auszulösen, wenn der Systemzeit-String gleich dem aus der Datei ist.

Nun möchte ich aber, dass die Uhrzeit aus der Datei mit der Systemzeit vergleichen wird in der Form Datei-Uhrzeit minus System-Uhrzeit soll einen integer-Wert in Minuten geben, sodass ich auf einem Label ausgeben kann: "Noch x Minuten!"

Es wird sich zwar immer um recht geringe Countdown-Zeiten von vielleicht höchstens einmal zehn Minuten handeln, jedoch frage ich mich gerade, wie das dann wohl bei der Datumsgrenze von 23:59 auf 00:00 und folgende aussieht, ob es da wohl Probleme gibt, wenn man nur die Uhrzeit und nicht das Datum verarbeitet?

Wäre sehr nett, wenn mir da jemand helfen könnte.


Vielen Dank im Voraus,
Plochinger
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: Mo 29.08.05 21:05 
In der Tat ist es immer hilfreich, Variablen vom Typ TDateTime für Zeitpunkte komplett mit Datum zu verwenden, vor allem wenn man Differenzen bilden will. Und das kann man auch prima: Einfach von der Zielzeit die aktuelle Zeit subtrahieren, und das Ergebnis als Zeit formatieren lassen.

Oder wenn es unbedingt Minuten sein sollen, auch wenn es tausende werden sollten: 1 Tag = 1.0; 1 Stunde = 1/24; 1 Minute = 1/24/60. Man braucht also nur die Differenz mit 24*60 multiplizieren und die restlichen Nachkommastellen abschneiden.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 29.08.05 22:12 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
const
 Ablaufzeit = '23:15';
begin
  ShowMessage('Noch '+TimeToStr(StrToTime(Ablaufzeit)-Frac(Now))+' bis '+Ablaufzeit);
// oder alternativ
  ShowMessage(Format('Noch %.1f Minuten bis %s',[(StrToTime(Ablaufzeit)-Frac(Now))*TimeToSec,Ablaufzeit]));
end;
Plochinger Threadstarter
Hält's aus hier
Beiträge: 5


D7 Pers
BeitragVerfasst: Mo 29.08.05 22:49 
Hallo,
vielen Dank schonmal, der Code funktioniert. Nur wie komme ich nun von der Ausgabe "hh:nn:sss" auf die reine Minutenausgabe? Ich habe es mal mit FormatDateTime probiert, aber das will nicht so recht, bzw. könnte LigH seine Methode bitte noch einmal ausführlicher erläutern, da komme ich noch nicht so ganz mit.


Sorry, dass ich so doof fragen muss, aber ich arbeite heute nach einer spontanen Idee zum ersten Mal mit Datum&Uhrzeiten.


Dankbare Grüße,
Plochinger
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: Mo 29.08.05 23:14 
Hab jetzt keine Lust, Delphi dafür anzuwerfen - aber so aus dem Gedächtnis:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  Zielzeit, Restdauer: TDateTime; // = type Double;
  Minuten: Integer;

// zu Beginn
  Zielzeit := DateTimePicker1.Date + DateTimePicker2.Time; // oder so was ähnliches...

// in der Schleife, z.B. Timer1Timer
  Restdauer := Zielzeit - Now; // Now: Systemfunktion - aktuelle Zeit inkl. Datum
  Minuten := Trunc(Restdauer*24*60);
  Label1.Caption := 'Noch '+IntToStr(Minuten)+' Minuten!';
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 29.08.05 23:36 
user profile iconPlochinger hat folgendes geschrieben:
Hallo,
vielen Dank schonmal, der Code funktioniert. Nur wie komme ich nun von der Ausgabe "hh:nn:sss" auf die reine Minutenausgabe?

Schau doch mal meinen Code an (nach "// oder alternativ").
Plochinger Threadstarter
Hält's aus hier
Beiträge: 5


D7 Pers
BeitragVerfasst: Fr 02.09.05 11:04 
Danke für die Hilfe an "delphifan" und LigH, das Programm funktioniert jetzt.



Grüße,
Plochinger