在德尔福获取当前年,日,月

时间:2013-11-27 14:22:51

标签: delphi validation datetime

我基本上想要这个C#代码:

if (month > currentDate.Month || (day > currentDate.Day && month > currentDate.Month)) 
{
    age = currentDate.Year - year - 1;
}
else
{
    age = currentDate.Year - year;
}
进入德尔福。但我遇到的问题是我不知道如何将当前的年,月和日作为整数,所以我可以做一些计算。我点击谷歌上与此相关的每个结果,但没有一个帮助过我。 (真的不是delphi的粉丝,但它是我们在计算类中所做的语言)

3 个答案:

答案 0 :(得分:5)

字面翻译如下:

uses
  ..., DateUtils;

if (month > MonthOf(Date)) or ((day > DayOf(Date)) and (month > MonthOf(Date)) then 
begin
  age := YearOf(Date) - year - 1;
end else
begin
  age := YearOf(Date) - year;
end;

但那不是最好的翻译。如果没有别的,如果代码在当前日期更改的午夜运行,则重复调用Date()会导致问题。以下将更安全:

uses
  ..., SysUtils;

var
  wYear, wMonth, wDay: Word:
begin
  ...
  DecodeDate(Date, wYear, wMonth, wDay);
  if (month > wMonth) or ((day > wDay) and (month > wMonth) then 
  begin
    age := wYear - year - 1;
  end else
  begin
    age := wYear - year;
  end;
  ...
end;

或者,查看DateUtils.YearsBetween()函数:

uses
  ..., SysUtils, DateUtils;

age := YearsBetween(Date, EncodeDate(year, month, day));

答案 1 :(得分:2)

为您的使用添加DateUtils,然后您可以将DayOf用于该月的某一天,MonthOf代表年份,YearOf代表年份。 Date为您提供了传递给这些函数的当前日期。

答案 2 :(得分:1)

您可以使用DecodeDate在单个函数调用中将Date函数的返回值中的年,月和日值分开:

var
  CurrYear, CurrMonth, CurrDay: Word;
begin
  DecodeDate(Date(), CurrYear, CurrMonth, CurrDay);
  ...
end;