Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
VAR
  xxx: tdatetime;
..
GetLocaleFormatSettings(1031,FormatSettings); {1031 = Deutschland }
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:
ausblenden Delphi-Quelltext
1:
(38'.'','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 user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.07.12 00:34 
Ich habe es mal ausprobiert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  xxx: TDateTime;
  FormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(1031, FormatSettings); { 1031 = Deutschland }
  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. :nixweiss:
(Und bei XE2 genauso)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 05.07.12 11:24 
Moin!

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Delphi 7 Professional, Windows XP SP3.
Soeben genau damit ausprobiert, wie bei user profile iconjaenicke, korrekte 0,43... :nixweiss:

Irgendwelche Seiteneffekte ausgeschlossen? Mal ein neues, leeres Projekt nur mit diesem Code getestet? :lupe:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 05.07.12 12:42 
Moin!

user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
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. :suspect:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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