TValue ist TValue. Du kannst implizit fast beliebigen Kram reinstecken, aber du musst explizit sagen was du rausholen möchtest, das ist beim (schrecklichen) Variant anders.
Delphi-Quellcode:
procedure printDateTime(timestamp: TDateTime);
begin
WriteLn( DateTimeToStr(timestamp) );
end;
procedure p();
var
asDateTime: TDateTime;
asValue: TValue;
asVariant: Variant;
begin
asDateTime := Now();
asValue := asDateTime;
asVariant := asDateTime;
printDateTime(asVariant);
printDateTime(asValue.AsVariant);
//acceptDateTime(asValue); // << Geht nicht
end;