- PR -

年齢計算

投稿者投稿内容
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-12-05 09:01
これでどうでしょう?
コード:
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才です


(民法143条に年齢の記述がなかったので、143条通りではないです。)
架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2003-12-05 09:22
シンプルにこうすると良いかも知れません。^^;
#というか初めからこうすれば良かった・・・。

コード:

public static int GetAge(DateTime today, DateTime birth) {
if (today.Month <= birth.Month && today.Day < birth.Day) {
return today.Year - birth.Year - 1;
}
else {
return today.Year - birth.Year;
}
}





[ メッセージ編集済み 編集者: 架空兎 編集日時 2003-12-05 10:47 ]
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-12-05 09:26
今度こそ
コード:
public static int GetAge(DateTime birth, DateTime today) 
{
    if (today.Month < birth.Month || (today.Month == birth.Month && today.Day < birth.Day))
    {
        return today.Year - birth.Year - 1;
    }
    else
    {
        return today.Year - birth.Year;
    }
}
public static void Main(string[] args)
{
    DateTime[] birth = {new DateTime(1994,2,28),
                        new DateTime(1994,3,1),
                        new DateTime(1996,2,29)};
    for (int i=0;i<birth.Length;++i)
    {
        for (int j=0;j<2;++j)
        {
            for (int k=0;k<3;++k)
            {
                DateTime today = birth[i].AddYears(j+1).AddDays(k-1);
                Console.WriteLine("{0} 生まれの人は、{1} に {2}才です",
                    birth[i].ToShortDateString(),today.ToShortDateString(),GetAge(birth[i],today));
            }
        }
    }
}
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/01 生まれの人は、1995/02/28 に 0才です
1994/03/01 生まれの人は、1995/03/01 に 1才です
1994/03/01 生まれの人は、1995/03/02 に 1才です
1994/03/01 生まれの人は、1996/02/29 に 1才です
1994/03/01 生まれの人は、1996/03/01 に 2才です
1994/03/01 生まれの人は、1996/03/02 に 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才です

tabou
常連さん
会議室デビュー日: 2002/07/15
投稿数: 39
投稿日時: 2003-12-05 12:36
皆さんありがとうございました。

プログラムの内容理解できました、使わせていただきます。

スキルアップ/キャリアアップ(JOB@IT)