如果当前月份的某天在您未来的月份中不存在,您希望发生什么?比如说,1 月 31 日 + 1 个月?如果您增加年份并且开始日期是闰年的 2 月 29 日,您会遇到同样的问题。所以不可能有一个通用的 IncMonth 或 IncYear 函数在所有日期都一致地工作。
对于任何有兴趣的人,我衷心推荐Julian Bucknall关于如何计算两个日期之间的月数和天数的此类计算所固有的复杂性的文章。
以下是唯一可能不会将异常引入通用日期数学的通用日期增量函数。但它只能通过将责任转回给可能具有他/她正在编程的特定应用程序的确切要求的程序员来实现这一点。
IncDay - 添加或减去天数。
IncWeek - 增加或减少周数。
但是,如果您必须使用内置函数,那么至少要确保它们执行您希望它们执行的操作。查看 DateUtils 和 SysUtils 单位。拥有这些函数的源代码是 Delphi 最酷的方面之一。话虽如此,这里是内置函数的完整列表:
IncDay - 添加或减去天数。
IncWeek - 增加或减少周数。
IncMonth - 加或减月数。
IncYear - 添加或减去若干年。
至于您问题的第二部分,如何使用 TDatetime 设置系统日期和时间,以下从另一篇帖子中无耻窃取的代码将完成这项工作:
procedure SetSystemDateTime(aDateTime: TDateTime);
var
lSystemTime: TSystemTime;
lTimeZone: TTimeZoneInformation;
begin
GetTimeZoneInformation(lTimeZone);
aDateTime := aDateTime + (lTimeZone.Bias / 1440);
DateTimeToSystemTime(aDateTime, lSystemTime);
setSystemTime(lSystemTime);
end;