Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 如何在delphi中将字符串转换为日期_Datetime_Delphi - Fatal编程技术网

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;