字面翻译就是如下:
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));
在功能看这里将是一个良好的开端http://www.delphibasics.co.uk /ByFunction.asp?Main=DatesAndTimes –
查看[DecodeDate](http://docwiki.embarcadero.com/Libraries/XE2/de/System.SysUtils.DecodeDate)和[Now](http:// docs。 embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_Now.html) – bummi
例如,如果Month> MonthOf(Now)或(Day> DayOf(Now))和(Month> MonthOf(Now)),则Age:= YearOf(Now) - Year - 1 else Age:= YearOf(Now) - Year; ',但是这样的代码需要改进很多。 – TLama