Datetime 如何在delphi中将字符串转换为日期
当我将Datetime 如何在delphi中将字符串转换为日期,datetime,delphi,Datetime,Delphi,当我将string类型转换为TDateTime时,我得到一个错误。我正在使用函数。我的日期字符串是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; 尝试将字符串日期时间转换为TDateTime值的函数。 请注意,传递的日期时间格式应为当前系统
string
类型转换为TDateTime
时,我得到一个错误。我正在使用函数。我的日期字符串是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;
尝试将字符串
日期时间转换为TDateTime
值的函数。
请注意,传递的日期时间格式应为当前系统日期/时间格式,否则将引发异常。
例如:
strotdatetime('2018-07-11 12:34:56')
使用VarToDateTime
从string
转换为TDateTime
的成功与否取决于用户系统中的区域设置。如果这些设置与字符串不匹配,转换将失败。这就是为什么在我的系统上转换失败的原因,在你的系统上也是如此
如果使用Delphi XE6或更高版本,主要选项是使用函数
ISO8601ToDate()
,如Marc Guillot所建议
如果您使用Delphi 2010或更高版本,您可以使用此处提供的解决方案
Delphi 2010之前的版本会阻塞输入字符串中的“T”,如果删除“T”或将其替换为空格,则可能会成功
使用转换函数,该函数接受可根据要转换的字符串进行调整的
t格式设置。这样的函数是StrToDateTime()的以下重载(请参阅)
设置a格式设置
以匹配要转换的字符串,可确保转换成功:
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;
这些似乎是ISO8601日期时间字符串:
因此,在DelphiXe6和更高版本上,您可以使用相应的转换函数:ISO8601ToDate
但是如果您使用的是旧版本的Delphi,那么您可以在XSBuiltIns单元上使用XMLTimeToDateTime函数来进行转换(从Delphi6开始提供)
很难回答这个问题,因为您没有提供任何代码。如果你阅读了没有帮助的文章,那么这可能会有帮助。如果你的文章没有帮助,那么你可以提供一个例子来说明你遇到的具体问题。好的发现+1,你可能需要添加一个小细节:。。。DelphiXe6及更高版本上的函数:ISO。。。该函数是在XE6中添加的,并在XE8文档中有适当的文档记录only@TomBrunberg是的,不幸的是OP没有说他使用的是什么Delphi版本。但你是对的,在以前的版本中,他需要找到另一个解决方案,比如定制的转换器。@TomBrunberg在这种情况下,他在XSBuiltIns上有XMLTimeToDateTime函数,从Delphi 6开始提供<代码>StrToDateTime('2018-07-11 12:34:56')
导致此处出现异常。此外,问题中的字符串的格式不同-1使用专用的ISO8601转换不是更好吗?
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;