このコードはDelphi XE2で機能するはずですが、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;
ヒントはありますか?
特別なDateTime-Formatsを変換したい場合は、StrToDateTimeの代わりに VarToDateTime を使用することをお勧めします。両方の実装を見てみると、StrToDateTimeがなんとなく...であり、VarToDateTimeがOSだけで判断できないかどうかをOSに尋ねます。
これはDelphi XE3で動作します(ただし、以前のバージョンでも動作するはずです)。
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;
2つの問題があります
文字列を解析する内部ルーチンはこの文字を使用して文字列の日付と時刻の部分を決定するため、WhiteSpaceをDateSeparatorとして使用することはできません。
StrToDateTime
関数は、月の部分でmmm
文字列を使用すると機能しません。これは、これで報告されます QC 23301