gpt4 book ai didi

delphi - 如何在Delphi XE5 DataSnap Rest中使用TDateTime参数

转载 作者:行者123 更新时间:2023-12-02 02:47:05 42 4
gpt4 key购买 nike

我创建了一个 Delphi XE5 DataSnap Rest 服务器(使用 FireDac 组件)。

到目前为止,除了 RECEIVING TDATETIME 作为参数之外,一切正常。

经过一些研究,我了解到这种类型的数据在 DataSnap 中不可用(至少不能直接使用)。

所以我想做一个像这样的基本功能:

InsertCustomer(aID : Integer; aDateOfBirth : TDateTime) : Integer;

我怎样才能实现这个功能,因为我无法使用 TDateTime...

我的想法(请求)是放置与从 TDataSet 导出的字段类似(相同)的内容。

当从 TDataSet 导出 TDateTime 列时,就像这样...... [“2013-10-10 10:47:40.0”]

最佳答案

没有使用 url 参数或 JSON 传输日期和时间的标准方法。请记住,TDateTime 实际上是幕后的 double,因此像示例中那样定义方法,参数应在 url 中以 float 形式给出。

如果您想接受 ISO8601 字符串形式的日期,则必须将参数定义为 string 类型并手动进行转换。这是我在自己的代码中使用的一个函数来解决此类问题。

uses
Soap.XSBuiltIns;

function ISODateStrToDate(DateStr: string): TDateTime;
var
xsDate: TXSDate;
begin
xsDate := TXSDate.Create;
try
xsDate.XSToNative(DateStr);
Exit(xsDate.AsDate);
finally
xsDate.Free;
end;
end;

此函数会丢弃 ISO8601 字符串的时间部分。大多数情况下我不需要它。

如果您需要时间部分,您可以使用

function XMLTimeToDateTime(const XMLDateTime: InvString; AsUTCTime: Boolean = False): TDateTime;

这来自同一个 Soap.XSBuiltIns 单元,但是请注意!此函数仅适用于包含完整时区信息(+01:00 或 -05:00)的完整 ISO8601 字符串结束部分)。对于您的示例 ISO8601 日期时间,它的行为就像您以 UTC 时间给出时间一样,并且它会尝试将其转换为本地时间的 TDateTime 值。

关于delphi - 如何在Delphi XE5 DataSnap Rest中使用TDateTime参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557005/

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