を使用しています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は実際には日付を2回解析します。最初に、日付/時刻を解析し、結果を投げ捨てて元の文字列のみを保存し、TXSCustomDateTime.GetAsUTCDateTimeがこの文字列を再度解析するTXSDateTime.XSToNativeが呼び出されます。ユー!