Delphi 将 TArray<Strings> 转换为 DateTime

Mar*_*1no -2 delphi pascal

我想将 TArray 中包含的所有值转换为 TDateTime 类型。ConvertDS 和 ConvertDE 是 TDateTime 变量,StoringData 是 TArray

StoringData : TArray<String>;
SetLength(StoringData,2);
  for x := 0 to High(StoringData) do
    for c := 0 to  High(StoringData[x]) do
      begin
         StoringData[x]   :=  TotTime;
         StoringData[c]   :=  DataCovertedS;
      end;


ConvertDS := (StrToDateTime(StoringData[c]));
ConvertDE := (StrToDateTime(StoringData[c+1]));
Run Code Online (Sandbox Code Playgroud)

数据是这样分割的

        Year  := Copy(aData,0,4);
        Month := Copy(aData,5,2);
        Day   := Copy(aData,7,2);
        DataCovertedS := Concat(Year+'-'+Month+'-'+Day);
Run Code Online (Sandbox Code Playgroud)

当我尝试执行它时 StrToDateTime 不起作用。

And*_*and 6

事实证明,实际的问题是“如何TDateTime从格式的字符串中获取值'YYYY-MM-DD'?”。

幸运的是,这并不难。每次在 API 中使用新函数时,都会阅读其文档。在这种情况下,StrToDate文档说明如下:

S必须由两个或三个数字组成,由DateSeparator全局变量或其TFormatSettings等价物定义的字符分隔。月、日和年的顺序由ShortDateFormat全局变量或其TFormatSettings等效项确定——可能的组合为 m/d/y、d/m/y 和 y/m/d。

所以,我们可以这样做:

// Define the date format:
var FS := TFormatSettings.Invariant;
FS.DateSeparator := '-';
FS.ShortDateFormat := 'y/m/d';

// Just an example of a string in this format:
const S = '2021-05-31';

// StrToDate will parse this using FS:
var D := StrToDate(S, FS);

// Test:
ShowMessage(DateToStr(D));
Run Code Online (Sandbox Code Playgroud)