为什么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解析此字符串。哎哟!