我想将 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 不起作用。
事实证明,实际的问题是“如何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)