当我将string
类型转换为TDateTime
时,出现错误。我正在使用VarToDateTime
函数。我的日期字符串是2018-07-11T13:45:14.363
。
var
s: string;
v: Variant;
dt: TDateTime;
begin
s := '2018-07-11T13:45:14.363';
v := s;
dt := VarToDateTime(v);
end;
当我将string
类型转换为TDateTime
时,出现错误。我正在使用VarToDateTime
函数。我的日期字符串是2018-07-11T13:45:14.363
。
var
s: string;
v: Variant;
dt: TDateTime;
begin
s := '2018-07-11T13:45:14.363';
v := s;
dt := VarToDateTime(v);
end;
VarToDateTime
将string
转换为TDateTime
的成功取决于用户系统中的区域设置。如果这些设置与字符串不匹配,则转换失败。这就是为什么该转换在我的系统上以及您的系统上都失败的原因。
首选,如果您使用Delphi XE6或更高版本,则可以使用函数ISO8601ToDate()
,如Marc Guillot在另一个答案中所建议的。
如果您使用Delphi 2010或更高版本,则可以使用此处介绍的解决方案。
早期版本低于Delphi 2010会在输入字符串中出现"T"时出现故障,如果删除或用空格替换"T"可能会成功。
TFormatSetting
。这样的函数是下面这个重载的 StrToDateTime()
(请参见Embarcadero document)。function StrToDateTime(const S: string; const AFormatSettings: TFormatSettings): TDateTime;
将AFormatSettings
设置为与要转换的字符串匹配,可以确保转换成功:
procedure TForm3.Button1Click(Sender: TObject);
var
fs: TFormatSettings;
s: string;
dt: TDateTime;
begin
fs := TFormatSettings.Create;
fs.DateSeparator := '-';
fs.ShortDateFormat := 'yyyy-MM-dd';
fs.TimeSeparator := ':';
fs.ShortTimeFormat := 'hh:mm';
fs.LongTimeFormat := 'hh:mm:ss';
s := '2018-07-11T13:45:14.363';
dt := StrToDateTime(s, fs);
end;
http://docwiki.embarcadero.com/Libraries/XE8/en/System.DateUtils.ISO8601ToDate
但如果您使用的是较旧版本的Delphi,则可以使用XSBuiltIns单元上的XMLTimeToDateTime函数进行转换(自Delphi 6以来可用)。
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Soap.XSBuiltIns.XMLTimeToDateTime
StrToDateTime
,将string
日期时间转换为TDateTime
值。
请注意,传递的日期时间格式应该是当前系统的日期时间格式,否则会抛出异常。
例如:StrToDateTime('2018-07-11 12:34:56');
StrToDateTime('2018-07-11 12:34:56')
引发了一个异常。此外,问题中的字符串格式不同。-1 - David Heffernan