gpt4 book ai didi

datetime - 对于 TDateTime 为负值的操作,Delphi 显示奇怪的结果

转载 作者:行者123 更新时间:2023-12-03 15:49:32 24 4
gpt4 key购买 nike

我们在 Delphi 中有一个解决方案,可以计算给定车辆的行程持续时间,例如 20 分钟、25 分钟等。然而,有时我们必须从特定的日期时间开始预测旅行的开始时间,例如 09:00 到 08:40。然后,我们需要从 TDateTime 变量(旅行的开始)中减去负值,在本例中,类似于“-00:20”。为此,我们将日期时间值乘以 -1(例如 MyDiffDateTimeVariable * -1)。我们得到的输出非常奇怪,有时我们得到完全相反的行为。在其他情况下,提取 20 分钟的操作会导致与原始日期时间相差两天。

这是一个示例控制台应用程序,它模拟了我们的情况、当前的输出以及我们的预期:

program DateTimeSample;

uses
System.SysUtils, System.DateUtils;

var
LDate1: TDateTime;
LDate2: TDateTime;
begin
LDate1 := IncMinute(0, 20);
LDate2 := IncMinute(0, -20);
WriteLn('Date1: ' + DateTimeToStr(LDate1));
// Output = Date1: 30/12/1899 00:20:00 [OK]
WriteLn('Date2: ' + DateTimeToStr(LDate2));
// Output = Date2: 29/12/1899 23:40:00 [OK]
WriteLn('-----');
WriteLn('Date1: ' + DateTimeToStr(LDate1 * -1));
// Output = Date1: 30/12/1899 00:20:00 [Expected 29/12/1899 23:40:00]
WriteLn('Date2: ' + DateTimeToStr(LDate2 * -1));
// Output = Date2: 31/12/1899 23:40:00 [Expected 30/12/1899 00:20:00]
ReadLn;
end.

最佳答案

当您检查转换为双倍的值时,您可以看到: double (LDate1) = 0.0138888888888889 double (LDate2) = -1.98611111111111

对我来说似乎是一个错误,因为今天它返回: double (LDate1) = 43168,0138888889双(LDate2)= 43167,9861111111

编辑:嗯,根据documentation ,这不是一个错误,而是一个功能:-)

When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 A.M. on December 29, 1899 is –1.25, not –1 + 0.25, which would equal –0.75. There are no TDateTime values from –1 through 0.

关于datetime - 对于 TDateTime 为负值的操作,Delphi 显示奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com