为什么xmltimetodatetime忽略毫秒?

  Test := XMLTimeToDateTime('2011-11-11T12:41:36.696+01:00', TRUE);
  T2 := FormatDateTime('yyyy''-''mm''-''dd''T''hh'':''nn'':''ss''.''zzz', Test);

之后t2='2011-11-11t11:41:36.000'
我正在使用Delphi2007。

最佳答案

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是可以理解的。
所有解析和数据存储都是在内部(实现部分)类中完成的,这些类除了通过(损坏的)包装器之外不能直接访问。你应该自己写一个日期/时间分析器。
除了xsbuiltins中所有的丑陋之外,xmltimetodatetime实际上还解析了两次日期。首先调用txsDateTime.xstonative,它解析日期/时间、丢弃结果并仅存储原始字符串,然后再次调用txsCustomDateTime.getAsutcDateTime解析此字符串。哎哟!

07-24 19:55