【问题标题】:TDateTimePicker and DateTDateTimePicker 和日期
【发布时间】:2015-03-18 18:31:00
【问题描述】:

对于 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 分钟后再次按下,我会得到相同的结果。 为什么值不一样?

【问题讨论】:

  • TDateTimerPicker 只更新日期部分,保持时间不变。

标签: delphi datetimepicker


【解决方案1】:

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

TDateTimePicker.Date 属性设置器仅更新内部存储的TDateTime 的日期部分,而保持现有时间不变。 TDateTimePicker.Date 属性 getter 返回整个内部存储的日期/时间,而不是日期本身,正如人们所期望的那样。因此,您会看到更新后的日期 + 由 TDateTimePicker 初始化的原始时间。

【讨论】:

    【解决方案2】:
    • TDateTimePicker.DateTDateTimePicker.Time 属性获取器返回一个完整的日期/时间值,尽管它们的名称。另一方面,属性设置器仅按预期分别更新日期和时间部分。
    • Date() 函数返回一个TDateTime,它只包含日期部分,没有时间部分。

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

    DateOf(DateTimePicker1.Date)
    

    【讨论】:

    • QC #6425(“DateTimePicker 日期和时间函数实际上返回日期时间”)“按设计”关闭! QC #47614(“TDateTimePicker 日期属性返回时间部分,即使没有记录这样做”)和QC# 61716(日期属性返回日期和时间)仍然打开。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多