datetime delphi format
La conversión con StrToDateTime y TFormatSettings no funciona (2)
Este código debería funcionar en Delphi XE2, pero da un error "no es una fecha y hora válidas" en la conversión de StrtoDateTime:
procedure TForm2.Button1Click(Sender: TObject);
var
s: string;
d: TDateTime;
FmtStngs: TFormatSettings;
begin
GetLocaleFormatSettings(GetThreadLocale, FmtStngs);
FmtStngs.DateSeparator := #32;
FmtStngs.ShortDateFormat := ''dd mmm yyyy'';
FmtStngs.TimeSeparator := '':'';
FmtStngs.LongTimeFormat := ''hh:nn'';
s := FormatDateTime('''', Now, FmtStngs);
d := StrToDateTime(s, FmtStngs);
end;
¿Alguna pista?
Si desea convertir algunos formatos de fecha y VarToDateTime especiales, debería usar mejor VarToDateTime lugar de StrToDateTime. Solo eche un vistazo a la implementación de ambos y reconocerá que StrToDateTime es de alguna manera ... y VarToDateTime le preguntará al sistema operativo si no puede determinarlo por sí mismo.
Esto funciona con Delphi XE3 (pero también debería funcionar con versiones anteriores):
procedure TForm2.Button1Click( Sender: TObject );
var
s: string;
d: TDateTime;
FmtStngs: TFormatSettings;
begin
GetLocaleFormatSettings( GetThreadLocale, FmtStngs );
FmtStngs.DateSeparator := #32;
FmtStngs.ShortDateFormat := ''dd mmm yyyy'';
FmtStngs.TimeSeparator := '':'';
FmtStngs.LongTimeFormat := ''hh:nn'';
s := FormatDateTime( '''', Now, FmtStngs );
d := VarToDateTime( s );
end;
Tienes dos problemas
No puede usar un WhiteSpace como DateSeparator, porque las rutinas internas para analizar la cadena usan este carácter para determinar las partes de fecha y hora de la cadena.
La función
StrToDateTime
no funciona cuando la parte de los meses usa la cadenammm
, esto se informa en este QC 23301