![]() |
Re: DateTimeToStr Konvertierungsproblem
ich finde es auch einigermaßen einleuchtend das nach dem sperren die einstellungen aktuallisiert werden. Denn wenn man zum Beispiel per Remotedesktop zugreift nutzt man eventuell andere Spracheinstellungen.
|
Re: DateTimeToStr Konvertierungsproblem
Zitat:
Wenn du das bist, dann solltest du das Format ändern. Entweder a.) das ![]() Es gilt folgende Grundregel: Niemals ein Datum / Uhrzeit so speichern, wie es dem Benutzer an der Oberfläche präsentiert wird! Immer ein international anerkanntes Stringformat oder ein maschinenlesbares Format verwenden. Variante b.) ist besonders einfach:
Delphi-Quellcode:
Übrigens !!! Die Klasse TRegistry hat die Methoden ReadDate, WriteDate.
var
datum : TDateTime; begin ... datum := SysUtils.Date; Reg.WriteString('LastUpdate', IntToStr(Trunc(datum))); // Trunc schneidet den evtl. Zeitanteil ab ... datum := StrToFloat(Reg.ReadString('LastUpdate')); // und zurück lesen Damit wird ein Datum gleich binär in die Registry geschrieben/gelesen. CPU-Belastung und Speicherverbrauch sind hier am Kleinsten. |
Re: DateTimeToStr Konvertierungsproblem
Moin, moin
ich bin es noch einmal. Ich hab die Sache jetzt dahin umgebogen, dass ich unabhängig von den eingestellten Datums- und Uhrzeitformaten des PCs bin. Dazu habe ich "StrToTimeDef" und "StrToDateDef" benutzt. Allerdings bin ich jetzt auf eine Sache gestossen, die ich nicht verstehe (muss dazu sagen, dass ich kein Profi in Sachen Programmierung bin, sondern das eher als Hobby betreibe um nich ganz zu verblöden). Folgenden Quellcode habe ich erstellt:
Delphi-Quellcode:
Zeit1 und Zeit2 sind identisch und die Abfrage Zeit1 kleiner Zeit2 wird auch übersprungen.
procedure TForm1.Button1Click(Sender: TObject);
var Datumsformat: TFormatSettings; Zeit1,Zeit2: TDateTime; begin Datumsformat.DateSeparator:='-'; Datumsformat.ShortDateFormat:='yyyy-dd-mm'; Datumsformat.TimeSeparator:=':'; Datumsformat.ShortTimeFormat:='HH:mm:ss'; Memo1.Clear; Zeit1:=(StrToDateDef('2007-10-08', -10, Datumsformat) + StrToTimeDef('10:00:00', -10, Datumsformat)); Zeit2:=(StrToDateDef('2007-10-08', -10, Datumsformat) + StrToTimeDef('10:00:00', -10, Datumsformat)); if Zeit1 < Zeit2 then begin Memo1.Lines.Add('Zeit1 kleiner Zeit2'); //Dies wird nie erreicht end; if Zeit1 < (StrToDateDef('2007-10-08', -10, Datumsformat)+StrToTimeDef('10:00:00', -10, Datumsformat)) then begin Memo1.Lines.Add('Zeit1 kleiner Berechnung'); //Dies wird immer erreicht Memo1.Lines.Add('Aber warum???'); end; Memo1.Lines.Add(''); Memo1.Lines.Add('Kurzes Datumsformat PC: '+ShortDateFormat); Memo1.Lines.Add('Datumsseparator: '+DateSeparator); end; Warum aber ist bei der zweiten Abfrage mit der Berechnung statt Zeit2 die Zeit1 plötzlich kleiner ? Kann mir das jemand erklären? Ich bin einigermassen ratlos... Gruß, Andreas. |
Re: DateTimeToStr Konvertierungsproblem
Hallo Andreas,
Datum und Zeit werden in Delphi (und nicht nur dort) als Bruchteile und Vielfache eines Tages gesehen und auf einen Gleitkommawert abgebildet. Beim Vergleich von zwei anscheinend gleich großen Gleitkommawerten treten fast regelmäßig Abbildungsprobleme bei den letzten Nachkommastellen der entsprechenden Zahlen auf, deshalb musst du entweder mit einer Epsilon-Schranke arbeiten oder vor dem Vergleich auf eine für deine Zwecke ausreichende Genauigkeit (Sekunden) umrechnen. Grüße vom marabu |
Re: DateTimeToStr Konvertierungsproblem
Hallo marabu,
vielen Dank für Deine Antwort, dann ist das Ganze wohl ein Rundungsproblem. Dank an alle, die geholfen haben. Gruß, Andreas. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz