很多API都希望ISO8601中没有毫秒,如下所示:
仅获取此时间戳之后下达的订单。格式应为YYYY-MM-ddTHH:mm:ssZ
我想主要的"问题"是秒后面的点(秒和毫秒之间),人们必须对点进行url编码(http GET),对吗?
SDateFormat: string = 'yyyy''-''mm''-''dd''T''hh'':''nn'':''ss''.''zzz''Z'''; { Do not localize }
我不能失去毫秒。
DateToISO8601(TTimeZone.Local.ToUniversalTime(RecodeMilliSecond(now, 0), false), true)
这是我目前的做法:
var
utc: TDateTime;
...
utc := TTimeZone.Local.ToUniversalTime(now);
utc := RecodeMilliSecond(utc, 0);
... Format('/orders?storefront=de&ts_created_from_iso=%sT%sZ', [FormatDateTime('yyyy-mm-dd', utc), FormatDateTime('hh:nn:ss', utc)])
还有别的主意吗?
3条答案
按热度按时间ws51t4hk1#
如果我没理解错你的问题,你想知道如何让
DateToISO8601()
不输出毫秒,对吗?答案是,你不能。但是,在使用System.Delete()
或TStringHelper.Remove()
之后,很容易去掉毫秒,因为你知道结果字符串中毫秒的确切偏移量和长度。否则,您可以继续使用手动方法。但是,您不需要
RecodeMilliseconds()
,只需调用一次FormatDateTime()
就足够了:nxowjjhe2#
这是我们使用的例行程序:
fzsnzjdm3#
您可以从System.DateUtils复制函数DateToISO8601并将其更改为: