我有一个非常简单的表单,其中包含TDateEdit
,TButton
和TLabel
组件。
如果给定的日期是某人的生日,那么该年龄的最佳方法是什么?有人会如何在TDateEdit
组件中的Delphi中执行此操作,然后在标签中显示年龄?
在组件中是否可能有内置功能或可以用来获取某人年龄的信息?我正在寻找最简单,最简单和最佳的方法。
答案 0 :(得分:6)
这是一个计算某人年龄的功能。
它与RTL函数YearsBetween明显不同,因为它可以计算两个日期之间的年数;并且根本上与某人的年龄不同。
class Editor extends JFrame implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
}
}
答案 1 :(得分:2)
您可以使用System.DateUtils单元中的YearsBetween()函数来计算今天(您现在从函数中获得)和TDateEdit
组件中的日期之间的年数,日期属性。
Label1.Text:= Trunc(YearsBetween(Now,DateEdit1.Date)).toString;
答案 2 :(得分:0)
我更喜欢伊恩·博伊德(Ian Boyd)的答案,但是对于那些坚持认为YearsBetween是必经之路的人来说,这是另一种选择。
如果Y是YearsBetween的结果,则正确的结果是Y或Y + 1。此例程调用YearsBetween并返回Y + 1。然后,它使用IncYear来查看答案是否太大。如果是,则返回Y。
这看起来似乎更简单,但是在幕后还需要做更多的工作。伊恩·博伊德(Ian Boyd)的答案就是您应该使用的答案。
function AgeInCompleteYears ( const nBirthDate : tDateTime;
const nCurrentDate : tDateTime ) : integer;
begin
Result := 1 + DateUtils.YearsBetween ( nCurrentDate, nBirthDate );
if DateUtils.IncYear ( nBirthDate, Result ) > nCurrentDate then
dec ( Result );
end;
答案 3 :(得分:0)
function GetAge(BirthDate:TDateTime; RefDate:TDateTime=0):Integer;
begin
if RefDate=0 then RefDate:= Today;
Result := Trunc((RefDate- BirthDate) / 365.25)
end;