有趣的Delphi日期函数

IT商界

  Delphi有个日期函数叫Daysbetween,它带两个参数DaysDetween(a,b),返回一个整数,表示a和b之间相差多少天。现在我们一起来研究Daysbetween有什么秘密:

  1.启动Delphi,新建一个项目,在窗体上放置一个DateTimePicker1,一个Label1,一个Button1,如图1。

  2.双击按钮写入下面代码:

  var

  i:integer;

  begin

  i:=Daysbetween(strTodate('2003-11-12'),DateTimePicker1.Time);

  Label1.Caption:=intTostr(i);

  end;

  3.在unit Unit1下写入use DateUtils。

  保存运行后将发现如果选择2003-11-12后面的日期,返回值和我们设想的预期的值是一致的,如选择2003-11-13,返回值为1;选择2003-11-14,返回值为2。

  但选择2003-11-12前面的日期,返回值却比我们设想的预期的值要少一天,如选择2003-11-11,返回值为0;选择2003-11-10,返回值为1;如图2。

  经笔者多方询问、研究后发现诀窍在这里:原来DateTimePicker有个默认时间的设置,当把DateTimePicker放置在窗体上时,其time属性自动记录当时的时间,如14:42:18,而DateTimePicker1.Time=用户选择的日期+14:42:18,DaysBetween函数计算的是两个参数之间的整数天,所以当选择2003-11-13时,比较的实际是2003-11-13的14:42:18和2003-11-12的0:00:00,超过了1天,所以返回值为1,当选择2003-11-11时,比较的实际是2003-11-11的14:42:18和2003-11-12的0:00:00,不足1天(24小时),所以返回值为0。

  解决办法有2个:

  一个是修改DateTimePicker1的Time属性为0:00:00,

  一个是把i:=Daysbetween(strTodate('2003-11-12'),Date TimePicker1.Time);修改为i:=DaysBetween(strTodate('2003-11-12'),EncodeDateTime(YearOf(DateTime Picker1.Time),MonthOf(DateTimePicker1.Time),DayOf(DateTimePicker1.Time),0,0,0,0));

  经过上面的分析我们终于了解到,DaysBetween比较的两个日期如果其时间小于24小时,哪怕差1秒,其返回的值还是0。