xsu*_*ira 15 delphi null datetime unassigned-variable
似乎没有办法分配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;
Run Code Online (Sandbox Code Playgroud)
是否有谁知道更好的解决方案什么不重叠0日期值?
负值是TDateTime危险的吗?(作为以前用途的能力资源)
ain*_*ain 15
正如安德烈亚斯已经写过的那样,这种TDateTime类型实际上double并不是"可空的".我用
const
c_UnassignedDate = -693594;
Run Code Online (Sandbox Code Playgroud)
对于空日期值,因为这表示不可能的日期00/00/0000.但是例如DevExpress使用
NullDate = -700000;
InvalidDate = NullDate + 1;
Run Code Online (Sandbox Code Playgroud)
所以似乎没有商定标准的谷,你应该选择一个适合你的需求.
首先,您需要通过"空TDateTime值" 来定义您的意思.
甲TDateTime值是与所述整数部分和小数部分编码的编码时间的日期双.所以,你可以得到的最接近'null date'的东西可能就是0.
因此,只需测试ADate <> 0以测试日期是否为"空".
但要注意:如果你声明一个TDateTime局部变量,那么它不一定是=0在你给它一个值之前.它可以是任何东西.当然,同样适用于类型的变量integer,double,boolean,...
此外,我相信TDateTime有价值的0编码日期1899-12-30.
最后,负值TDateTime完全正常.例如,-5000对应于1886-04-22.
我不太明白你的代码.如果您想0用作"未分配"值(如果您对接近1899-12-30的日期感兴趣,那么为什么不做
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := ADate = 0;
end;
Run Code Online (Sandbox Code Playgroud)
或者,可能(但不等同!),
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := IsZero(Date);
end;
Run Code Online (Sandbox Code Playgroud)
在他的回答中,ain为"未分配日期"值提供了几个更合理的选择.
| 归档时间: |
|
| 查看次数: |
36250 次 |
| 最近记录: |