计算直到圣诞节的天数

时间:2013-11-21 20:10:22

标签: delphi date

我需要计算直到下一个圣诞节24.12的天数。 我想知道下一个圣诞节是否有一个非常简单的计算功能。

     deltaDays := Today - NextChristmas; 

2 个答案:

答案 0 :(得分:10)

您可以使用DaysBetween中的DateUtils功能:

var
  Christmas: TDate;
begin

  Christmas := EncodeDate(YearOf(Now), 12, 24);
  ShowMessageFmt('Days to Christmas: %d', [DaysBetween(Now, Christmas)]);

当然,需要特殊的逻辑来处理圣诞节后但新年之前的日子。

答案 1 :(得分:8)

如果你在代码中经常使用它,最好创建一个函数来完成它,如下所示:

function DaysToNextChristmas(Date: TDateTime): Cardinal;
var
  Year, Month, Day: Word;
  Christmas: TDateTime;
begin
  Date := Int(Date);
  DecodeDate(Date, Year, Month, Day);
  if (Month = 12) and (Day >= 25) then Inc(Year);
  Christmas := EncodeDate(Year, 12, 25);
  Result := Trunc(Christmas - Date);
end;

说明:

  • 正如我们应该知道的那样,Delphi的TDateTime数据类型实际上是Double(浮点)。整数部分表示日期,分数表示时间。这就是我在函数开头使用Int来获取整数(日期)部分的原因。实际上,它没用,所以你可以简单地删除它。
  • 要知道下一个圣诞节何时发生,我们需要参考日期的年份,我们可以使用YearOf单位的DateUtils。但是因为我们必须检查参考日期是否在圣诞节和新年之间,所以我们使用DecodeDate来获取月和日值。
  • 检查月份是否为12(12月),当天是25或更大,如果答案是肯定的,则增加年份值,下一个圣诞节必须在下一年。
  • 使用EncodeDate建立下一个圣诞日期。
  • 使用减法运算符( - )获取从参考日期(参数)到下一个圣诞节的天数。将其分配给Result变量以将其返回。

用法示例:

ShowMessageFmt('Days to Christmas: %d', [DaysToNextChristmas(Now)]);

我希望它有所帮助。