delphirttitdatetime

How can I distinguish TDateTime properties from Double properties with RTTI?


Using the RTTI system in Delphi 2010, is there any way to find out if a property is a TDateTime? It's currently treating it as a double whenever I call back asVariant and also if I check the property type. Is this due to the fact it can only see the base type? (TDateTime = double)


Solution

  • Try checking the Name property of the TRttiProperty.PropertyType

    I don't have Delphi 2010, but this works in XE.

    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,
      Classes,
      Rtti;
    
    type
      TMyClass =class
      private
        FDate: TDateTime;
        FProp: Integer;
        FDate2: TDateTime;
        FDate1: TDateTime;
      public
       property Date1 : TDateTime read FDate1  Write FDate1;
       property Prop : Integer read FProp  Write FProp;
       property Date2 : TDateTime read FDate2  Write FDate2;
      end;
    
    var
     ctx : TRttiContext;
     t :  TRttiType;
     p :  TRttiProperty;
    begin
     ctx := TRttiContext.Create;
     try
       t := ctx.GetType(TMyClass.ClassInfo);
       for p in  t.GetProperties do
        if CompareText('TDateTime',p.PropertyType.Name)=0 then
         Writeln(Format('the property %s is %s',[p.Name,p.PropertyType.Name]));
     finally
       ctx.Free;
     end;
      Readln;
    end.
    

    this code returns

    the property Date1 is TDateTime
    the property Date2 is TDateTime