在XSBuiltIns代碼的確解析毫秒部分,但該部分是從未用於編碼功能。
function TXSBaseTime.GetAsTime: TDateTime;
begin
Result := EncodeTime(Hour, Minute, Second, 0);
end;
和
function TXSBaseCustomDateTime.GetAsDateTime: TDateTime;
var
BiasDT: TDateTime;
BiasTime, BiasLocal: Integer;
BiasHour, BiasMins: Word;
begin
{ NOTE: In XML Years can exceed 9999 - that's not the case for TDateTime.
So here, there would be a problem with the conversion }
Result := EncodeDateTime(Year, Month, Day, Hour, Minute, Second, 0);
和
function TXSBaseCustomDateTime.GetAsUTCDateTime: TDateTime;
var
AdjustDT: TDateTime;
begin
Result := EncodeDateTime(Year, Month, Day, Hour, Minute, Second, 0);
作爲最後一個被從XMLTimeToDateTime叫,這是完全可以理解的毫秒部分總是0
所有解析並且數據存儲在內部(實現部分)類中完成,這些類不能直接訪問除了通過(破損)包裝。 IOW,你應該寫你自己的日期/時間解析器。
除了在XSBuiltIns中發現的所有醜陋之外,XMLTimeToDateTime實際上還會對日期進行兩次解析。首先調用TXSDateTime.XSToNative,它解析日期/時間,拋出結果並僅存儲原始字符串,然後TXSCustomDateTime.GetAsUTCDateTime再次解析該字符串。 Euch!