Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - StrToTime ?


Goaznic - Fr 07.10.11 09:18
Titel: StrToTime ?
Ich habe ein Memo mit einer Formatierten Zeit.
Und ich habe einen neuen Wert, ebenfalls formatierte Zeit, in einem Edit.
Mein Ziel ist jetzt eigentlich folgendes:

Delphi-Quelltext
1:
if 'Zeit aus Memo' - 'Zeit aus Edit' < 0 then                    
Aber Memo und Edit sind ja String. Wie muss ich das umwandeln? StrToTime geht da ja auch nicht, weil's formatiert ist.
Also beide Zeiten sind aus FormatDateTime('nn:ss:zzz', Startzeit - Time) entstanden.


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 07.10.2011 um 11:43
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Dude566 - Fr 07.10.11 10:52

Also ich kann Zeiten dieses Formats so miteinander verrechnen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.btnShowGapClick(Sender: TObject);
var
  Time1, Time2, GapTime : TDateTime;
begin
  try
    Time1 := StrToDateTime(edit1.Text);
    Time2 := StrToDateTime(edit2.Text);
    GapTime := Time1 - Time2;
    ShowMessage(TimeToStr(GapTime));
  except
    ShowMessage('Error');
  end;
end;


Oder wo liegt dein Problem?


Narses - Fr 07.10.11 10:52

Moin!

user profile iconGoaznic hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe ein Memo mit einer Formatierten Zeit.
Und ich habe einen neuen Wert, ebenfalls formatierte Zeit, in einem Edit.
Mein Ziel ist jetzt eigentlich folgendes:

Delphi-Quelltext
1:
if 'Zeit aus Memo' - 'Zeit aus Edit' < 0 then                    
Aber Memo und Edit sind ja String.
Das hört sich doch nach dem klassischen Anfängerfehler an, visuelle Komponenten zur Datenhaltung zu missbrauchen. ;) Du solltest die Daten in internen Strukturen im entsprechenden Datenformat aufbewahren und nur zur Anzeige (für den Menschen) umwandeln. :idea:

user profile iconGoaznic hat folgendes geschrieben Zum zitierten Posting springen:
Wie muss ich das umwandeln?
Die einzelnen Elemente selbst parsen und dann damit wieder umwandeln:
DOH hat folgendes geschrieben:
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;

Die Funktion gibt einen Wert des Typs TDateTime zurück, der einer bestimmten Stunde, Minute, Sekunde und Millisekunde entspricht.

Unit
SysUtils

Kategorie
Datum/Zeit

Delphi-Syntax:

Delphi-Quelltext
1:
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;                    

Beschreibung
EncodeTime codiert die angegebenen Werte für Stunde, Minute, Sekunde und Millisekunde in einen Wert des Typs TDateTime.
Für Hour sind Werte von 0 bis 23 zulässig.
Die gültigen Werte für Min und Sec liegen zwischen 0 und 59.
Die gültigen Werte für MSec liegen zwischen 0 und 999.
Befinden sich die angegebenen Werte nicht innerhalb der Bereiche, wird eine EConvertError-Exception ausgelöst.
Der Rückgabewert ist eine Zahl zwischen 0 und 1 (inklusiv), die die angegebene Zeit in Nachkommastellen ausdrückt. Der Wert 0 entspricht Mitternacht, 0.5 ist Mittag, 0.75 ist 18:00 abends usw.
cu
Narses


Goaznic - Fr 07.10.11 10:58

Danke, das scheint die Lösung für mein Problem zu sein. :D


Dude566 - Fr 07.10.11 11:07

Aber warum soll er es denn erst "umkodieren" wenn er doch die Zeiten im Format nn:ss:zzz hat? Damit lässt sich doch prima rechnen, wie oben in meinem Beispiel.


Goaznic - Fr 07.10.11 11:36

Ich probier beides mal aus und gebe dann eine Rückmeldung! ;D

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Also zu Dude566s Idee: Wenn ich StrToDateTime mach, dann bekomme ich eine Meldung '00:05:412 ist keine gültige Datums- und Uhrzeitangabe' oder so ähnlich ...
Jetzt wende ich mich mal der Idee von Narses zu.^^


Dude566 - Fr 07.10.11 17:28

Wie sieht denn der string aus, den du damit in eine Zeit umwandelst?


platzwart - Fr 07.10.11 22:42

'00:05:412' -> hh:mm:MMM ?


Goaznic - Mo 10.10.11 11:40

@platzwart: was meinst du mit
Zitat:
hh:mm:MMM
??? hh ist doch stunden, mm Minuten und MMM ... keine Ahnung. Aber ich hab Minuten, Sekunden und Millisekunden, also nn:ss:zzz

@Dude566: Also mein String sieht wie gesagt so aus: 00:05:412
:D