我正在尝试使用StrToDate方法将日期从字符串转换为TDate,但是当我以yyyy / mm / dd格式向其传递日期时,它会给我这个错误:'' ' 2013年/ 11/12''不是有效日期'。我有什么想法,我做错了什么?感谢
var
newDate: TDate;
begin
newDate := StrToDate(sDate);
end;
答案 0 :(得分:7)
只有string
作为输入的StrToDate()
的重载版本使用操作系统中用户的默认语言环境设置。该错误表示该字符串与日期的用户区域设置格式不匹配。
使用接受TFormatSettings
作为输入的StrToDate()
的重载版本,以便您指定所需的格式:
var
newDate: TDate;
fmt: TFormatSettings;
begin
// TFormatSettings.Create() was added in XE
// and GetLocaleFormatSettings() was deprecated
//
// fmt := TFormatSettings.Create;
GetLocaleFormatSettings(0, fmt);
fmt.ShortDateFormat := 'yyyy/mm/dd';
fmt.DateSeparator := '/';
newDate := StrToDate(sDate, fmt);
end;