Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何将天和小时添加到日期时间变量?_Delphi - Fatal编程技术网

Delphi 如何将天和小时添加到日期时间变量?

Delphi 如何将天和小时添加到日期时间变量?,delphi,Delphi,如果我需要获得一个日期,如2013年12月30日,并在晚上8点增加10天,那么如果我在第一个日期中有一个变量,我如何在Delphi中做到这一点呢?您可以使用+操作符添加整数天,并使用SysUtils.ReplaceTime()来更改时间,例如: uses ..., SysUtils; var DT: TDateTime; begin DT := EncodeDate(2013, 12, 30); // Dec 30 2013 @ 12AM DT := DT + 10; // J

如果我需要获得一个日期,如2013年12月30日,并在晚上8点增加10天,那么如果我在第一个日期中有一个变量,我如何在Delphi中做到这一点呢?

您可以使用
+
操作符添加整数天,并使用
SysUtils.ReplaceTime()
来更改时间,例如:

uses
  ..., SysUtils;

var
  DT: TDateTime;
begin
  DT := EncodeDate(2013, 12, 30); // Dec 30 2013 @ 12AM
  DT := DT + 10; // Jan 9 2014 @ 12AM
  ReplaceTime(DT, EncodeTime(20, 0, 0, 0)); // Jan 9 2014 @ 8PM
end;

您可以使用
+
运算符添加整数天,并使用
SysUtils.ReplaceTime()
更改时间,例如:

uses
  ..., SysUtils;

var
  DT: TDateTime;
begin
  DT := EncodeDate(2013, 12, 30); // Dec 30 2013 @ 12AM
  DT := DT + 10; // Jan 9 2014 @ 12AM
  ReplaceTime(DT, EncodeTime(20, 0, 0, 0)); // Jan 9 2014 @ 8PM
end;

DateUtils单元有一系列的帮助程序,允许您将自己与TDateTime的编码方式隔离开来。例如:

uses
  SysUtils, DateUtils;
....
var
  DT: TDateTime;
....
DT := EncodeDate(2013, 12, 30); // Dec 30 2013 @ 12AM
DT := IncDay(DT, 10);
DT := IncHour(DT, 20);
这可能有点冗长,但我选择这种方法来说明IncDay和IncHour。我建议您学习DateUtils的内容,以熟悉其所有功能

另一种方法是:

DT := EncodeDateTime(2013, 12, 30, 20, 0, 0, 0); // Dec 30 2013 @ 8PM
DT := IncDay(DT, 10);
甚至:

DT := IncDay(EncodeDateTime(2013, 12, 30, 20, 0, 0, 0), 10);

DateUtils单元有一系列的帮助程序,允许您将自己与TDateTime的编码方式隔离开来。例如:

uses
  SysUtils, DateUtils;
....
var
  DT: TDateTime;
....
DT := EncodeDate(2013, 12, 30); // Dec 30 2013 @ 12AM
DT := IncDay(DT, 10);
DT := IncHour(DT, 20);
这可能有点冗长,但我选择这种方法来说明IncDay和IncHour。我建议您学习DateUtils的内容,以熟悉其所有功能

另一种方法是:

DT := EncodeDateTime(2013, 12, 30, 20, 0, 0, 0); // Dec 30 2013 @ 8PM
DT := IncDay(DT, 10);
甚至:

DT := IncDay(EncodeDateTime(2013, 12, 30, 20, 0, 0, 0), 10);

此外,
TDateTime
存储为双精度,日期为整数部分,时间为小数部分。该日期存储为自1899年12月30日起的天数。为什么不是12月31日还不清楚。1900年1月1日的天数值为2。这就是为什么您可以使用“+”轻松地添加天数。此外,DateUtils在XXX中为所有可能的情况提供了sugar helper例程,所有这些例程都列在文档中。@Jerry事实上,TDateTime使用浮点是一件令人头痛的事。一个更好的选择是从epoch开始的Int64毫秒。@David-那会更好吗?我经常听说
TDateTime
有问题,但我总是发现它在我的商业世界编程中非常方便。@HughJones它可以避免浮点运算的变化无常。多年来,由于使用浮点运算而不是整数运算,
TDateTime
出现了许多问题。最近重新编写了大量的
DateUtils
单元,以将该算法作为整数算法来执行,以处理这些问题。在这件事上有很多质量控制问题。我认为解决问题的好主意来自Emba以外的人,他厌倦了使用内置例程进行草率的计算。浮点数对于日期/时间处理来说很糟糕。除此之外,
TDateTime
存储为双精度,日期为整数部分,时间为小数部分。该日期存储为自1899年12月30日起的天数。为什么不是12月31日还不清楚。1900年1月1日的天数值为2。这就是为什么您可以使用“+”轻松地添加天数。此外,DateUtils在XXX中为所有可能的情况提供了sugar helper例程,所有这些例程都列在文档中。@Jerry事实上,TDateTime使用浮点是一件令人头痛的事。一个更好的选择是从epoch开始的Int64毫秒。@David-那会更好吗?我经常听说
TDateTime
有问题,但我总是发现它在我的商业世界编程中非常方便。@HughJones它可以避免浮点运算的变化无常。多年来,由于使用浮点运算而不是整数运算,
TDateTime
出现了许多问题。最近重新编写了大量的
DateUtils
单元,以将该算法作为整数算法来执行,以处理这些问题。在这件事上有很多质量控制问题。我认为解决问题的好主意来自Emba以外的人,他厌倦了使用内置例程进行草率的计算。浮点数对于日期/时间处理来说很糟糕。谢谢你注意到DateUtil谢谢你注意到DateUtil