检查的两个变量TDateTime类型(Checking two TDateTime variable

2019-06-28 06:47发布

我使用C ++ Builder和有以下问题:

我想,如果检测的日期/时间晚于其他日期/时间,并且由多少。

这里是我当前的代码:

TDateTime testFirstDate("11/09/2012");
TDateTime testFirstTime("14:00");

TDateTime testSecondDate("12/09/2012");
TDateTime testSecondTime("16:00");

TDateTime testCombined1 = testFirstDate + testFirstTime;
TDateTime testCombined2 = testSecondDate + testSecondTime;

TDateTime testDateDifference = testSecondDate - testFirstDate;
std::cout << testDateDifference;

在上述例子中,以下被打印出来:31/12/1899

这两个值之间的差异仅仅是1天。 为什么:正在打印31/12/1899,而不是这样的:1?

Answer 1:

所不同的是1天,22小时。

TDateTime在Delphi和C ++生成器是一个双,其中,所述整体部分(部分小数点的左边)存储的天数自1899年12月30日的基准日期(下面见注)和小数部分(部分小数点右边)是时间。

你减法后看到的1899年是因为你不到一整天,因此数量的整数部分是零,正如我所说的零的日期是1899年十二月,基准日由于您的日期是1天比基准日期以后(当作为表示TDateTime ,日期被解释为1899年12月31日。

22小时的时间部分是大约0.9167 (实际上, 0.916666666666667 ),它代表一个天的22 / 24ths。

Delphi的运行库包含一个名为单位DateUtils ,这IIRC是提供给C ++ Builder中,以及(有它一个头文件),其中包含功能,这可以帮助你,就像DaysBetween ,你可能会发现有用的。 有它的利用现有的C ++的例子在这里 。

至于平等(一个接一个日期的存在),则可以使用标准><>=<= != ,和==运算符。 我已经证明了这一点以下为好。

这里有一个简单的例子(在Delphi,因为我没有这台机器上安装了C ++ Builder中),这或许可以解释:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, DateUtils;

var
  StartDate, EndDate, Diff: TDateTime;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    // Base date, formatted in US date format
    WriteLn('BaseDate: ', FormatDateTime('mm/dd/yyyy hh:nn:ss', 0));

    StartDate := EncodeDateTime(2012, 9, 11, 14, 0, 0, 0);
    EndDate := EncodeDateTime(2012, 9, 12, 16, 0, 0, 0);
    Diff := EndDate - StartDate;

    WriteLn('Diff as String: ', DateToStr(Diff));
    WriteLn('Diff as Double: ', Diff);
    WriteLn('DaysBetween: ', DaysBetween(EndDate, StartDate));

    // Equality
    WriteLn('EndDate after StartDate`, EndDate > StartDate);
    RegEx.Free;
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

这会产生这样的输出:

BaseDate: 12/30/1899 00:00:00
Diff as String: 12/31/1899
Diff as Double:  1.08333333332848E+0000
DaysBetween: 1
EndDate after StartDate: TRUE

注:基准日是由微软COM成立,出于兼容性考虑的Delphi / C ++ Builder中采用它。



Answer 2:

您可以使用正常的- +<>===TDateTime

所以,看一个日期提前的另一个,你可以,例如,减去他们,看看如果结果大于或大于零较小。



文章来源: Checking two TDateTime variables