首页 > 解决方案 > delphi中如何将字符串转换为日期

问题描述

当我将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;

在此处输入图像描述

标签: datetimedelphi

解决方案


stringTDateTimeusing的转换是否成功VarToDateTime取决于用户系统中的区域设置。如果这些设置与字符串不匹配,则转换失败。这就是为什么在我的系统上转换失败的原因,在你的系统上也是如此。


如果您使用的是 Delphi XE6 或更高版本,主要选项是使用Marc Guillot在另一个答案ISO8601ToDate()中建议的功能

如果您使用的是 Delphi 2010 或更高版本,则可以使用此处提供的解决方案。

早于 Delphi 2010 的版本会在输入字符串中阻塞“T”,如果“T”被删除或替换为空格,则可能会成功。


使用一个转换函数,该函数接受一个TFormatSetting可以根据要转换的字符串进行调整的转换函数。这样的功能是以下重载StrToDateTime()(参见Embarcadero 文档

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;

推荐阅读