TDateTimePicker中Date与Time的误导

 

一、DateTime,Date,Time存储方式本质上也是以double来存储的。用整数部分表示日期,小数部分表示时间。可看我另外一篇“access 中“日期/时间”存储方式 ”

TDateTimePicker有上面三种属性。

二、TDateTimePicker的kind属性设置为dtkDate用于显示日期,第二个kind设置为dtkTime用于显示时间,但是不能同时显示的。

三、用DateTimePicker.Date和Time的值要注意:取Date要用trunc取整得到,取Time要用frac取小数得到。

四、DateTimePicker的Date,Time,DateTime三者是相等的。

下面这个例子看一下:

新建一个工程放入一个TDateTimePicker、两个TEdit、两个按钮,并设置两个按钮的事件代码如下

{DateTimePicker1的日期和时间设置为:2010-03-26 13:00:00}
procedure TForm1.Button1Click(Sender: TObject);  //取出Date部分,并判断它的值
var
  t:TDateTime;

begin
  t:= DateTimePicker1.Date;

  Edit1.Text:=DateTimeToStr(t);
end;


procedure TForm1.Button2Click(Sender: TObject);    //判断取Date和DateTime是否相等

begin

   if DateTimePicker1.Time = DateTimePicker1.DateTime then
      begin
        Edit2.Text:='相等'
      end
    else
      begin
        Edit2.Text:='不相等';
      end;

end;

可以看到虽然我们的代码中只取了Date或是Time,但是它们的值和DateTime的值是相等的。

所以如果你用如下代码

{DateTimePicker1的日期和时间设置为:2010-03-26 13:00:00}
procedure TForm1.Button1Click(Sender: TObject);  //取出Date部分,并判断它的值
var
  t:TDateTime;

begin
  t:= DateTimePicker1.Date + DateTimePicker1.Time;

  //t:= trunc(DateTimePicker1.Date)+frac(DateTimePicker1.Time);//这才是等到DateTimePicker1的日期和时间

   Edit1.Text:=DateTimeToStr(t);
end;

结果是:2120-6-21 2:00:00

相当于是把DateTimePicker1的时间和日期乘以2了,并不是说DateTimerPicker的Date+Time就和DateTime相等。

而用 trunc取整数部分 加上 frac取小数部分 函数,两者取出来的和就会和原来相等。

参考:

http://ifso.iteye.com/blog/1752420

posted @ 2014-07-02 22:37  findumars  Views(4737)  Comments(0Edit  收藏  举报