转换与StrToDateTime和TFormatSettings不起作用(Conversion wi

2019-07-03 17:18发布

此代码应在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;

任何提示?

Answer 1:

如果你要转换一些特殊的日期时间的格式,你应该更好地利用VarToDateTime代替StrToDateTime。 只需看看两者的实现,你会意识到,这StrToDateTime是莫名其妙......而VarToDateTime会问OS,如果它不能自行确定。

这适用于德尔福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;


Answer 2:

你有两个问题

  1. 你不能用一个空白的DateSeparator,因为内部程序来解析字符串使用这个字符来确定字符串的日期和时间部分。

  2. StrToDateTime当个部分使用功能不起作用mmm字符串,该报告在此QC 23301



文章来源: Conversion with StrToDateTime and TFormatSettings does not work