Delphi 如何使用RTTI区分TDateTime属性和双重属性?

Delphi 如何使用RTTI区分TDateTime属性和双重属性?,delphi,rtti,tdatetime,Delphi,Rtti,Tdatetime,使用Delphi 2010中的RTTI系统,有没有办法确定某个属性是否为TDateTime?当前,每当我调用asVariant以及检查属性类型时,它都将其视为double。这是因为它只能看到基类型吗?(TDateTime=double)尝试检查 我没有Delphi2010,但它在XE中工作 {$APPTYPE CONSOLE} uses SysUtils, Classes, Rtti; type TMyClass =class private FDate: TDa

使用Delphi 2010中的RTTI系统,有没有办法确定某个属性是否为TDateTime?当前,每当我调用asVariant以及检查属性类型时,它都将其视为double。这是因为它只能看到基类型吗?(TDateTime=double)

尝试检查

我没有Delphi2010,但它在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.
此代码返回

the property Date1 is TDateTime
the property Date2 is TDateTime

定义类型时,这里的关键点是类型指令。这两个定义不同:

Type
  TDateTime = Double; // here p.PropertyType.Name returns Double

but

Type
  TDateTime = type Double; // here p.PropertyType.Name returns TDateTime

or 

Type
  u8 = type Byte; // here p.PropertyType.Name returns u8

but

Type
  u8 = Byte; // here p.PropertyType.Name returns Byte !

日期/时间始终是双精度的,其中整数部分表示天,而小数部分表示分和秒(作为一天的一部分)。我理解它在技术上是双精度的,但我是否可以使用RTTI检查它最初是否定义为TDateTime+1非常感谢,为我节省了重新编写大量代码的时间:)这也可以使用,因为至少Delphi 5使用了较旧的TypeInfo方法。显然,OP没有声明有问题的类型,所以从技术上讲,这不是一个答案,但你说得很对,而且这个额外的解释是很好的信息+1.