【问题标题】:Work out number of days using Month Calendar Delphi使用月历 Delphi 计算天数
【发布时间】:2020-03-31 18:28:19
【问题描述】:

我在表单上使用了两个月历。我在每个日期上选择一个日期,我想计算这两天之间的天数。我只有代码是

procedure TForm1.Button1Click(Sender: TObject);
Var
 N, m: TDate;
 d: Real;
 l,k:String;
begin
 N := (MonthCalendar1.Date);
 m := MonthCalendar2.Date;
 L := formatdatetime('dd', N);
 K:=formatdatetime('dd',M);
 d := StrToFloat(L)-StrToFloat(K);
 ShowMessage(FloatToStr(d));

end; 

【问题讨论】:

  • 您不需要 MonthCalendar 来执行此操作。 TDateTime 到小数点 RHS 的部分实际上是一个“天数”,所以如果你从另一个中减去一个,你会找到“天数之间”。对两者都应用 Trunc 以丢弃时间部分...
  • 你能用代码告诉我吗
  • 如果 D1 和 D2 是两个 TDateTimes(如果您希望使用 TMonthCalendar 可以输入),则 DaysBetween := D2 - D1。我将在几分钟内发布基于此的答案。

标签: delphi monthcalendar


【解决方案1】:

您可以使用 System.DateUtils 中的 DaysBetween() 来获取两个 TDateTime 值之间的差异(以天为单位)。

见文档:http://docwiki.embarcadero.com/Libraries/Rio/en/System.DateUtils.DaysBetween

编辑,见代码:

uses System.DateUtils;

[..]

procedure TForm1.Button1Click(Sender: TObject);
var
  NumDays: Integer;    
begin
  NumDays := DaysBetween(MonthCalendar1.Date, MonthCalendar2.Date);     
  ShowMessage('Days between selected dates: ' + NumDays.ToString);    
end;

【讨论】:

  • 我更喜欢这个方案,主要是因为它使代码更具可读性。 (而且,在某些情况下,这些函数可能会防止出现数字问题。)
【解决方案2】:

您不需要 MonthCalendar 来执行此操作。 TDateTime 到小数点 RHS 的部分实际上是一个“天数”,所以如果你从另一个中减去一个,你会找到“天数之间”。对两者都应用 Trunc 以丢弃时间部分。 TDateTime 的定义见http://docwiki.embarcadero.com/Libraries/Rio/en/System.TDateTime

例如,给定

var
  D1,
  D2 : TDateTime;
  DaysBetween : Integer;

并且 D1 和 D2 是两个 TDateTimes(如果您希望使用 TMonthCalendar 可以输入),那么

  DaysBetween := Trunc(D2) - Trunc(D1);

对内置 Trunc 函数的调用会丢弃 TDateTime 值的小数部分(即小数点右侧的部分),因此 23:59 在一个天和第二天的 00:01 计算为相隔一天。这可能是也可能不是您想要的结果,具体取决于您的应用程序,这就是为什么我建议您自己计算而不是使用内置的 DaysBetween 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2013-09-17
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多