gpt4 book ai didi

json - 如何将 Delphi XE 10 中的 JSON 字符串返回的日期时间解析为 TDateTime

转载 作者:行者123 更新时间:2023-12-03 15:28:19 27 4
gpt4 key购买 nike

我从请求中收到以下 JSON:

{
"cdPlayer": 3,
"nmPlayer": "Player Name",
"dtCreate": "2016-08-24T22:53:31.687",
"dtChange": null,
"idStatus": true
}

我想加载将 dtCreate 和 dtChange 转换为 TDateTime。如何正确地做到这一点?没有TJSONDateTime转换 GetValue 。下面是我当前的代码,我将其转换为纯字符串。

procedure TfrmPrincipal.btnInfoClick(Sender: TObject);
var
jsonRoot: TJSONObject;
tokenRequest: TRESTRequest;
tokenResponse: TRESTResponse;
tokenClient: TRESTClient;
tokenAutenticacao: TOAuth2Authenticator;
begin
tokenClient := TRESTClient.Create(nil);
tokenRequest := TRESTRequest.Create(nil);
tokenResponse := TRESTResponse.Create(nil);
tokenAutenticacao := TOAuth2Authenticator.Create(nil);
try
tokenRequest.Client := tokenClient;
tokenRequest.Response := tokenResponse;
tokenRequest.Method := TRESTRequestMethod.rmPUT;
tokenClient.Authenticator := tokenAutenticacao;
tokenAutenticacao.TokenType := TOAuth2TokenType.ttBEARER;
tokenAutenticacao.AccessToken := 'token_string';
tokenClient.BaseURL := 'http://host/url/method';
tokenRequest.Execute;
jsonRoot:= TJSONObject.ParseJSONValue(tokenResponse.JSONText) as TJSONObject;
Memo1.Lines.Add('cdPlayer => ' + jsonRoot.GetValue('cdPlayer').Value);
Memo1.Lines.Add('nmPlayer=> ' + jsonRoot.GetValue('nmPlayer').Value);
Memo1.Lines.Add('dtCreate=> ' + jsonRoot.GetValue('dtCreate').Value);
Memo1.Lines.Add('dtChange=> ' + jsonRoot.GetValue('dtChange').Value);
Memo1.Lines.Add('idStatus=> ' + (jsonRoot.GetValue('idStatus') as TJSONBool).ToString);
finally
tokenAutenticacao.Free;
tokenResponse.Free;
tokenRequest.Free;
tokenClient.Free;
end;
end;

我正在使用 Delphi XE 10 西雅图。谢谢

编辑

就重复项而言,我不知道该数据格式是 ISO 8601。这就是为什么我无法通过 Google 在任何地方找到答案。也许我的问题会帮助其他像我一样不知道的人。

最佳答案

我将从该字符串中提取日期的每个部分(年、月、日、小时、分钟、毫秒),并对日期时间值进行编码。这很容易,因为每个部分始终位于相同的位置。

function JSONDate_To_Datetime(JSONDate: string): TDatetime;
var Year, Month, Day, Hour, Minute, Second, Millisecond: Word;
begin
Year := StrToInt(Copy(JSONDate, 1, 4));
Month := StrToInt(Copy(JSONDate, 6, 2));
Day := StrToInt(Copy(JSONDate, 9, 2));
Hour := StrToInt(Copy(JSONDate, 12, 2));
Minute := StrToInt(Copy(JSONDate, 15, 2));
Second := StrToInt(Copy(JSONDate, 18, 2));
Millisecond := Round(StrToFloat(Copy(JSONDate, 19, 4)));

Result := EncodeDateTime(Year, Month, Day, Hour, Minute, Second, Millisecond);
end;

关于json - 如何将 Delphi XE 10 中的 JSON 字符串返回的日期时间解析为 TDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com