Delphi:如何确定和清空TDatetime值



似乎无法将NULL("未分配值")分配给TDateTime变量。

我想象的唯一方法是使用这样的东西:

function isNull(aDate : TDateTime) : boolean;
const NullDate = 0.0;
var aNullDate : TDatetime;
    ms : Int64;
begin
  aNullDate := NullDate;
  ms := MilliSecondsBetween(aDate,aNullDate);
  result := (ms = Int64(0));
end;

有没有人知道更好的解决方案不重叠0日期值?

TDateTime值是否危险?(作为以前用途的可用资源)

正如Andreas所写,TDateTime类型实际上是double,因此不"可为null"。我使用

const
  c_UnassignedDate = -693594;

因为这表示CCD_ 5的不可能的日期。但例如DevExpress使用

NullDate = -700000;
InvalidDate = NullDate + 1;

因此,似乎没有达成一致的标准值,你应该选择一个适合你需要的。

首先需要定义"空TDateTime值"的含义。

TDateTime值是以整数部分编码的日期和以小数部分编码的时间的双精度。因此,最接近"空日期"的可能是0

因此,只需测试ADate <> 0即可测试日期是否为"null"。

但要注意:如果您声明了一个TDateTime局部变量,那么在给它赋值之前,它不一定是=0。它可以是任何东西。当然,同样的情况也适用于integerdoubleboolean等类型的变量。。。

此外,我相信值为0TDateTime编码日期1899-12-30。

最后,负TDateTime值是完全正常的。例如,-5000对应于1886-04-22

我不太明白你的代码的意思。如果你想使用0作为"未分配"值(如果你对1899-12-30年的日期感兴趣,这是不好的),为什么不简单地使用呢

function IsUnassigned(ADate: TDateTime): boolean;
begin
  result := ADate = 0;
end;

或者,可能(但不等同!),

function IsUnassigned(ADate: TDateTime): boolean;
begin
  result := IsZero(Date);
end;

在他的回答中,ain对"未分配日期"值给出了几个更合理的选择。

在库Spring Framework for DelphiSpring.Persistence.Core.Session.pas单元(http://www.spring4d.org)在方法TSession.ExecuteScalar<T>中,在结果使用值Default(T); 为NULL的情况下

我想,你的功能可以看起来像

function IsNull(ADate: TDateTime): Boolean;
begin
  Result := ADate = Default(TDateTime);
end;

tDateTime对于0和-1之间的值是未定义的,这意味着-0.5的tDateTime是一个未定义的值,对于作为NaN的替代项的空日期非常有用。DateTimeToString将显示-0.5,与+0.5相同;

使用PDateTime而不是TDateTime,并作为nil值发送。如果没有指向值的指针,则结果没有值。

要检查值,请使用Assigned ptr:

MyDatePointer := nil;
if ( Assigned(MyDatePointer)) then ...

相关内容

  • 没有找到相关文章

最新更新