public static int Age(DateTime d1,DateTime d2)
{
bool d1IsAfter;
try
{
d1IsAfter = d1 > new DateTime(d1.Year,d2.Month,d2.Day);
}
catch (ArgumentOutOfRangeException)
{
d2 = d2.AddDays(1);
d1IsAfter = d1 > new DateTime(d1.Year,d2.Month,d2.Day);
}
return d2.Year - d1.Year + (d1IsAfter ? -1 : 0);
}
public static void Main(string[] args)
{
DateTime[] d = {new DateTime(1994,2,28),
new DateTime(1994,3,3),
new DateTime(1996,2,29)};
for (int i=0;i<d.Length;++i)
{
for (int j=0;j<2;++j)
{
for (int k=0;k<3;++k)
{
DateTime d2 = d[i].AddYears(j+1).AddDays(k-1);
Console.WriteLine("{0} 生まれの人は、{1} に {2}才です",
d[i].ToShortDateString(),d2.ToShortDateString(),Age(d[i],d2));
}
}
}
}
1994/02/28 生まれの人は、1995/02/27 に 0才です
1994/02/28 生まれの人は、1995/02/28 に 1才です
1994/02/28 生まれの人は、1995/03/01 に 1才です
1994/02/28 生まれの人は、1996/02/27 に 1才です
1994/02/28 生まれの人は、1996/02/28 に 2才です
1994/02/28 生まれの人は、1996/02/29 に 2才です
1994/03/03 生まれの人は、1995/03/02 に 0才です
1994/03/03 生まれの人は、1995/03/03 に 1才です
1994/03/03 生まれの人は、1995/03/04 に 1才です
1994/03/03 生まれの人は、1996/03/02 に 1才です
1994/03/03 生まれの人は、1996/03/03 に 2才です
1994/03/03 生まれの人は、1996/03/04 に 2才です
1996/02/29 生まれの人は、1997/02/27 に 0才です
1996/02/29 生まれの人は、1997/02/28 に 0才です
1996/02/29 生まれの人は、1997/03/01 に 1才です
1996/02/29 生まれの人は、1998/02/27 に 1才です
1996/02/29 生まれの人は、1998/02/28 に 1才です
1996/02/29 生まれの人は、1998/03/01 に 2才です
|