![]() |
Delphi-Version: 2009
StrToTime löst Exception bei Millisekunden
Ich versuche gerade einen String "12:05:20.160" in einen TDateTime umzuwandeln und nutze dazu die Funktion StrToTime. Diese löst jedoch eine Exception aus und meinte der String wäre keine gültige Zeit.
Ich habe schon versucht mit GetLocaleFormatSettings() die aktuellen Einstellungen zu laden und anzupassen, jedoch ohne erfolg.
Delphi-Quellcode:
Bei meiner Suche im Netz habe ich irgendwas gelesen davon das man nicht GetLocaleFormatSettings verwenden soll sondern TFormatSettings.Create, jedoch geht das mit Delphi 2009 nicht.
var
glFmtSet: TFormatSettings; Date: TDateTime; begin GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, glFmtSet); glFmtSet.TimeSeparator := ':'; glFmtSet.ShortTimeFormat := 'hh:nn:ss'; glFmtSet.LongTimeFormat := 'hh:nn:ss.zzz'; Date := StrToTime('12:05:20.160'); //Exception wird ausgelöst -> "Keine gültige Zeit" Ich hoffe es hat jemand einen Tipp ansonsten werde ich den String wohl zerlegen müssen und ihn mit EncodeTime() umwandeln. |
AW: StrToTime löst Exception bei Millisekunden
Du musst den Decimalseparator in dem TFormatSetting anpassen, da dieser als ms Trennzeichen verwendet wird. Und natürlich auch die Formatsettings als Parameter übergeben. Zudem würde ich keine Funktionsnamen (i.e. Date) als Variablennamen verwenden:
Delphi-Quellcode:
var
glFmtSet: TFormatSettings; Datum : TDateTime; begin GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, glFmtSet); glFmtSet.DecimalSeparator := '.'; Datum := StrToTime('12:05:20.160', glFmtSet); end; |
AW: StrToTime löst Exception bei Millisekunden
Also DecimalSeparator ist bereits auf '.' gesetzt, ich hatte das nur nicht erwähnt in dem Beispiel.
Du hast natürlich auch recht das man die Format Einstellungen auch der Funktion übergeben muss. Aber auch das war nur ein Fehler im Beispiel, genau wie der Variablen Name "Date" nur ein Beispiel ist. Ich habe den Fehler gefunden ich hatte bei dem String erst den '.' in einen weiter ':' umgewandelt und LongTimeFormat auf 'hh:nn:ss:zzz' eingestellt und das scheint wohl nicht zu gehen mit 'hh:nn:ss.zzz' klappt es jetzt.
Delphi-Quellcode:
var
glFmtSet: TFormatSettings; TestDate: TDateTime; begin GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, glFmtSet); glFmtSet.ThoundSeparator := ','; glFmtSet.DecimalSeparator := '.'; glFmtSet.DateSeparator := '.'; glFmtSet.TimeSeparator := ':'; glFmtSet.ShortDateFormat := 'dd.mm.yy'; glFmtSet.LongDateFormat := 'dd.mm.yyyy'; glFmtSet.ShortTimeFormat := 'hh:nn:ss'; glFmtSet.LongTimeFormat := 'hh:nn:ss.zzz'; TestDate := StrToTime('12:05:20.160', glFmtSet); //Jetzt klappt alles ;-) |
AW: StrToTime löst Exception bei Millisekunden
FYI
Da du im Datum-Formatstring nicht den DateSeparator-Platzhalter benutzt
Delphi-Quellcode:
ist es zwecklos den DateSeparator zu setzen. Es schadet nichts, bringt aber auch nichts.
/
Der TimeSeparator-Platzhalter ist übrigens
Delphi-Quellcode:
und den benutzt du - aber wohl eher zufällig
:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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 by Thomas Breitkreuz