TDateTimePicker and Date



对于Delphi XE7的DatetTimePicker的一个奇怪的东西来说,这是一个简单的问题。

我有这个代码。。。

procedure TForm1.Button1Click(Sender: TObject);
begin
  DateTimePicker1.Date:= Date;
  memo1.Lines.Add(FloatToStr(Date) + ' vs ' + FloatToStr(DateTimePicker1.Date));
end;

今天,2015年3月18日,在我按下按钮后,我得到的结果是:

42081 vs 42081.846316956

如果我在5分钟后再次按下,我会得到同样的结果。为什么值不一样?

Date()函数截断返回值的小数部分(将时间部分设置为0)。因此,它返回当前日期/时间,只填写日期。

TDateTimePicker.Date属性设置器只更新内部存储的TDateTime的日期部分,保持现有时间不变。TDateTimePicker.Date属性getter返回整个内部存储的日期/时间,而不是预期的日期本身。因此,您看到的是由TDateTimePicker初始化的更新日期+原始时间。

  • TDateTimePicker.DateTDateTimePicker.Time属性getter都返回完整的日期/时间值,尽管它们的名称不同。另一方面,属性设置器按照预期分别只更新日期和时间部分
  • Date()函数返回一个只包含日期部分而不包含时间部分的TDateTime

要单独检索日期部分,可以使用DateUtils单元中的DateOf()函数去掉TDateTimePicker.DateTDateTimePicker.DateTime属性返回的值的时间部分:

DateOf(DateTimePicker1.Date)

将Datepicker1.Time设置为0,您将得到相同的结果。这是你在小数中看到的白天的分数。

最新更新