很多 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)])
還有其他想法嗎?
uj5u.com熱心網友回復:
如果我正確理解您的問題,您想知道如何DateToISO8601()不輸出毫秒,對嗎?答案是,你不能。System.Delete()但是,在使用或者TStringHelper.Remove()因為您知道結果字串中毫秒的確切偏移量和長度之后,很容易去除毫秒。
var
utc: TDateTime;
iso: string;
...
utc := TTimeZone.Local.ToUniversalTime(Now);
iso := DateToISO8601(utc, true);
Delete(iso, 20, 4);
... '/orders?storefront=de&ts_created_from_iso=' iso;
否則,只需堅持您的手動方法。但是,您不需要RecodeMilliseconds(),只需 1 次呼叫FormatDateTime()就足夠了:
const
cISOFormat: string = 'yyyy''-''mm''-''dd''T''hh'':''nn'':''ss''Z''';
var
utc: TDateTime;
...
utc := TTimeZone.Local.ToUniversalTime(Now);
... '/orders?storefront=de&ts_created_from_iso=' FormatDateTime(cISOFormat, utc);
uj5u.com熱心網友回復:
這是我們使用的例程:
function DateTimeToXML(dtInput: TDateTime): String;
var
fmt: TFormatSettings;
begin
// If this will be used in a multithreaded environment then
// you should use your own TFormatSettings to be thread safe
fmt:=TFormatSettings.Create(); // initialize, it's on the stack so MUST NOT be freed
DateTimeToString(Result, 'yyyy-mm-dd''T''hh:nn:ss''Z''',
TTimeZone.Local.ToUniversalTime(dtInput), fmt);
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460919.html
標籤:德尔福 delphi-10-西雅图
上一篇:如何獲取更改的輸入標簽的值?
