![]() |
StrToTime löst unerklärbare Exception aus
Hallo zusammen,
ich benutze in meiner Software eine grundlegende Routine, die aus einem String im Format HH:MM:SS,zzz (Beispiel: 00:00:25,570) mittels StrToTime einen TDateTime-Wert machen soll:
Delphi-Quellcode:
Das funktioniert bei meinen Kunden auf den unterschiedlichsten Windows-Systemen auch wunderbar. Nur bei einem Kunden (WindowsXP Home, Service Pack 2) nicht - der bekommt immer -1 also die Exception. Die eingelesenen Daten aus einer Textdatei sind bei mir die gleichen wie bei ihm - bei mir geht es problemlos, bei ihm nicht. Jetzt habe ich mittels Logfiles und Ferndiagnose schon folgendes rausgefunden:
try
Result:=StrToTime(s); except Result:=-1; end; (a) Die Systemeinstellungen wie TimeSpearator, Timeformat usw. sind exakt die gleichen wie bei mir (b) als Exception kommt "'00:00:25,570' ist keine gültige Uhrzeit" Ich bin mit meinem Latein am Ende. Hat jemand eine Idee woran es noch liegen kann? cu easy |
Re: StrToTime löst unerklärbare Exception aus
Hat er zufällig ein nicht-deutsches Windows, oder sind seine Regional-Settings anders? Typisches Problem, StrToTime & Co. sind sprachabhängig.
...:cat:... |
Re: StrToTime löst unerklärbare Exception aus
Zitat:
Noch besser ist es aber, wenn Du Dich nie darauf verlässt, dass Du hier den richtigen Wert auf dem Rechner des Kunden vorfindest und diese Einstellungen immer setzt. Was natürlich noch bleibt ist der Dezimale-Seperator, der ist nicht überall ein Komma! Der beste Weg ist (wie gesagt), dass Du Dich nie darauf verlässt, dass das System des Kunden eine bestimmte Einstellung besitzt. Hol Dir einfach mit GetLocaleFormatSettings die aktuellen Einstellungen und setze alle diese Einstellungen (die Du verwendest) explizit auf den richtigen Wert. Dieses veränderte Record übergibst Du dann mit an die Funktion StrToTime und dann sollte es immer ohne Probleme laufen. Teste es einfach mal, indem Du den Dezimal-Seperator und den TimeSeperator setzt. Welche dieser Werte wirklich verwendet werden kannst Du natürlich lokal bei Dir prüfen, setze einfach mal alle Felder des Records auf einen völlig dummen Wert (z.B. '#') und änder nur die, von denen Du ausgehst, dass sie benötigt werden (also erstmal nur TimeSeperator). Klappt dann die Umwandlung, dann liegt das Problem wirklich woanders, scheiterst Du aber auch, dann wird eine der anderen Einstellungen ebenfalls nötig sein (z.B. der schon sooft erwähnte Dezimal-Seperator). Gruß Der Unwissende |
Re: StrToTime löst unerklärbare Exception aus
Ob es ein nicht-deutsches Windows ist kann ich nicht sagen. Aber ich habe auch schon folgendes probiert:
Delphi-Quellcode:
Und die StartFormatSettings habe ich in einer Logdatei ausgegeben. Sind die gleichen Werte wie bei mir.
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
try Result:=StrToTime(s,StartFormatSettings); except Result:=-1; end; Selbst
Delphi-Quellcode:
hat nichts gebracht - und spätestens dann müssen es ja die korrekten Settings sein, oder?
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
StartFormatSettings.ThousandSeparator:='.'; StartFormatSettings.DateSeparator:='.'; StartFormatSettings.TimeSeparator:=':'; StartFormatSettings.DecimalSeparator:=','; try Result:=StrToTime(s,StartFormatSettings); except Result:=-1; end; |
Re: StrToTime löst unerklärbare Exception aus
Das setzen der Werte, also
Delphi-Quellcode:
habe ich allerdings nicht in der Routine selber gemacht sondern in einem begin ... end-Teil einer globalen Unit. Müsste doch aber reichen, oder?
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
StartFormatSettings.ThousandSeparator:='.'; StartFormatSettings.DateSeparator:='.'; StartFormatSettings.TimeSeparator:=':'; StartFormatSettings.DecimalSeparator:=','; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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