AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi StrToTime löst unerklärbare Exception aus
Thema durchsuchen
Ansicht
Themen-Optionen

StrToTime löst unerklärbare Exception aus

Ein Thema von easywk · begonnen am 7. Mär 2007 · letzter Beitrag vom 7. Mär 2007
Antwort Antwort
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#1

StrToTime löst unerklärbare Exception aus

  Alt 7. Mär 2007, 16:06
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:
try
  Result:=StrToTime(s);
except
  Result:=-1;
end;
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:

(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
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: StrToTime löst unerklärbare Exception aus

  Alt 7. Mär 2007, 16:26
Hat er zufällig ein nicht-deutsches Windows, oder sind seine Regional-Settings anders? Typisches Problem, StrToTime & Co. sind sprachabhängig.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: StrToTime löst unerklärbare Exception aus

  Alt 7. Mär 2007, 16:29
Zitat von easywk:
(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"
Hi, ich würde sagen, dass Du schon auf dem richtigen Weg bist, an einer anderen Stelle sollte es gar nicht scheitern. Hast Du denn alle Lokale-Einstellungen ausgelesen? Insbesonder auch ShortTimeFormat? Ich glaube das war das Format (steht in der OH), dass zur Umwandlung tatsächlich verwendet wird (ok, gerade nachgeschaut, ist wohl doch der TimeSeperator, sorry).
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
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: StrToTime löst unerklärbare Exception aus

  Alt 7. Mär 2007, 16:33
Ob es ein nicht-deutsches Windows ist kann ich nicht sagen. Aber ich habe auch schon folgendes probiert:
Delphi-Quellcode:
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
try
  Result:=StrToTime(s,StartFormatSettings);
except
  Result:=-1;
end;
Und die StartFormatSettings habe ich in einer Logdatei ausgegeben. Sind die gleichen Werte wie bei mir.

Selbst
Delphi-Quellcode:
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
StartFormatSettings.ThousandSeparator:='.';
StartFormatSettings.DateSeparator:='.';
StartFormatSettings.TimeSeparator:=':';
StartFormatSettings.DecimalSeparator:=',';
try
  Result:=StrToTime(s,StartFormatSettings);
except
  Result:=-1;
end;
hat nichts gebracht - und spätestens dann müssen es ja die korrekten Settings sein, oder?
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: StrToTime löst unerklärbare Exception aus

  Alt 7. Mär 2007, 16:36
Das setzen der Werte, also
Delphi-Quellcode:
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,StartFormatSettings);
StartFormatSettings.ThousandSeparator:='.';
StartFormatSettings.DateSeparator:='.';
StartFormatSettings.TimeSeparator:=':';
StartFormatSettings.DecimalSeparator:=',';
habe ich allerdings nicht in der Routine selber gemacht sondern in einem begin ... end-Teil einer globalen Unit. Müsste doch aber reichen, oder?
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz