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