AGB  ·  Datenschutz  ·  Impressum  







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

StrToTime löst Exception bei Millisekunden

Ein Thema von TUX_der_Pinguin · begonnen am 9. Nov 2012 · letzter Beitrag vom 10. Nov 2012
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

StrToTime löst Exception bei Millisekunden

  Alt 9. Nov 2012, 11:18
Delphi-Version: 2009
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:
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"
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.

Ich hoffe es hat jemand einen Tipp ansonsten werde ich den String wohl zerlegen müssen und ihn mit EncodeTime() umwandeln.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: StrToTime löst Exception bei Millisekunden

  Alt 9. Nov 2012, 11:27
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: StrToTime löst Exception bei Millisekunden

  Alt 9. Nov 2012, 12:18
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 ;-)

Geändert von TUX_der_Pinguin ( 9. Nov 2012 um 12:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: StrToTime löst Exception bei Millisekunden

  Alt 10. Nov 2012, 08:01
FYI

Da du im Datum-Formatstring nicht den DateSeparator-Platzhalter benutzt / ist es zwecklos den DateSeparator zu setzen. Es schadet nichts, bringt aber auch nichts.

Der TimeSeparator-Platzhalter ist übrigens : und den benutzt du - aber wohl eher zufällig

http://docwiki.embarcadero.com/Libra...FormatDateTime
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 09:01 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