Autor |
Beitrag |
GuaAck
      
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Mi 04.07.12 23:59
Liebe Experten,
auch mit viel Erfahrung in Delphi gibt es immer wieder Fragen. Ich möchte einfach einen String in TDateTime wandeln:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| VAR xxx: tdatetime; .. GetLocaleFormatSettings(1031,FormatSettings); xxx:=strtotime('10:20:31', Formatsettings); .. |
Es gibt keine Fehlermeldung, strtotime erkennt also eine gültige Zeit, aber xxx ist im Debugger immer was mit 1.xxxe+292, also Unsinn, auch bei der weiteren Verarbeitung.
Ähnlich, wenn ich ein Datum mit strtodate konvertiere.
Formatsettings brauche ich eigentlich nicht, aber das sieht ok aus. Unten das, was der Debugger anzeigt. Die 12690 sind für mich nicht verständlich, aber wenn ich die z. B. auf 0 ändere, das hat keinen Einfluss.
Habe xxx auch mal als double deklariert - logisch, kein Einfluss.
Hat jemand einen Tipp? Zur Info: Delphi 7 Professional, Windows XP SP3.
Gruß GuaAck
FormatSettings im Debugger:
Delphi-Quelltext 1:
| (3, 8, '.', ',', 2, '.', ':', ';', 'DM', 'dd.MM.yyyy', 'dddd, d. MMMM yyyy', '', '', 'hh:mm', 'hh:mm:ss', ('Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), ('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'), ('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'), ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'), 12690) |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 05.07.12 00:34
Ich habe es mal ausprobiert: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var xxx: TDateTime; FormatSettings: TFormatSettings; begin GetLocaleFormatSettings(1031, FormatSettings); xxx := strtotime('10:20:31', FormatSettings); ShowMessage(FloatToStr(xxx)); | Damit kann ich das nicht reproduzieren, das funktioniert bei Delphi 7 problemlos, da kommt korrekt 0,43... heraus.
(Und bei XE2 genauso)
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 05.07.12 11:24
Moin!
GuaAck hat folgendes geschrieben : | Delphi 7 Professional, Windows XP SP3. |
Soeben genau damit ausprobiert, wie bei jaenicke, korrekte 0,43...
Irgendwelche Seiteneffekte ausgeschlossen? Mal ein neues, leeres Projekt nur mit diesem Code getestet?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Do 05.07.12 12:06
kann es sein daß die Optimierung zugeschlagen hat?
Ich hab es mit XE2 ausprobiert, Deinen Quelltext 1:1 übernommen ohne das xxx im Folgenden zu verwenden. Beim Debuggen ohne Optimierung enthält xxx korrekt 0,43. MIT Optimierung zeit der Debugger immer 0 an da die Variable nicht weiter verwendet wird. Baue ich nun irgendeine Weiterverwendung von xxx ein zeigt auch der Debugger immer die korrekten 0,43
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 05.07.12 12:42
Moin!
mandras hat folgendes geschrieben : | kann es sein daß die Optimierung zugeschlagen hat?
[...]
MIT Optimierung zeit der Debugger immer 0 an da die Variable nicht weiter verwendet wird. Baue ich nun irgendeine Weiterverwendung von xxx ein zeigt auch der Debugger immer die korrekten 0,43 |
Das Verhalten ist - ohne dass ich jetzt ausführlich nachgesehen hätte - korrekt, weil dann der Wert direkt in einem FPU-Register stehen bleibt (nehme ich an).
Ich tippe eher auf überschriebenen Speicher oder sowas.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
GuaAck 
      
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Do 05.07.12 22:13
Danke an alle,
es ist ein Optimierungsproblem des Compilers: Da der Compiler gemerkt hat, dass ich xxx nicht weiter benutze - ich wollte den Wert ja nur mit dem Debugger ansehen - hat er xxx wohl nicht wirklich als Variable angelegt. Als die Zeile ShowMessage eingefügt hatte, da wurde xxx gebraucht und dann habe ich auch im Debugger den richtigen Wert gesehen.
Wenn ich xxx im PUBLIC-Teil meiner Klasse definiere und nicht lokal, dann geht es auch.
Danke also nochmals,
Gruß
GuaAck
|
|
|