DOBON.NET

生年月日から年齢を計算する

生年月日から年齢を計算する方法をいくつか紹介します。なお、ここでは主に満年齢の計算方法を紹介し、最後に少しだけ数え年の計算方法についても触れます。

年齢について詳しくは、以下のリンク先を参考にしてください。

普通に計算する方法

皆さんは生年月日から年齢を計算する時、どのようにされるでしょうか?普通は、まず現在の年から生年月日の年を引いた数を求め、もし今年の誕生日がすでに来ているのであればその数を年齢とし、来ていなければその数から1つ引いた数を年齢とするのではないでしょうか。

この方法で年齢を計算した例を以下に示します。

VB.NET
コードを隠すコードを選択
''' <summary>
''' 生年月日から年齢を計算する
''' </summary>
''' <param name="birthDate">生年月日</param>
''' <param name="today">現在の日付</param>
''' <returns>年齢</returns>
Public Shared Function GetAge(ByVal birthDate As DateTime, _
                              ByVal today As DateTime) As Integer
    Dim age As Integer = today.Year - birthDate.Year
    '誕生日がまだ来ていなければ、1引く
    If today.Month < birthDate.Month OrElse _
        (today.Month = birthDate.Month AndAlso _
            today.Day < birthDate.Day) Then
        age -= 1
    End If

    Return age
End Function
C#
コードを隠すコードを選択
/// <summary>
/// 生年月日から年齢を計算する
/// </summary>
/// <param name="birthDate">生年月日</param>
/// <param name="today">現在の日付</param>
/// <returns>年齢</returns>
public static int GetAge(DateTime birthDate, DateTime today)
{
    int age = today.Year - birthDate.Year;
    //誕生日がまだ来ていなければ、1引く
    if (today.Month < birthDate.Month ||
        (today.Month == birthDate.Month &&
        today.Day < birthDate.Day))
    {
        age--;
    }

    return age;
}

このメソッドの使用例を以下に示します。

VB.NET
コードを隠すコードを選択
'生年月日が2000年2月29日
Dim birthDate As New DateTime(2000, 2, 29)
'現在の日付
Dim today As DateTime = DateTime.Today

'年齢を計算する
Dim age As Integer = GetAge(birthDate, today)
C#
コードを隠すコードを選択
//生年月日が2000年2月29日
DateTime birthDate = new DateTime(2000, 2, 29);
//現在の日付
DateTime today = DateTime.Today;

//年齢を計算する
int age = GetAge(birthDate, today);

仮に算出した年を現在の日付から引いて生年月日と比較する方法

上記の方法では月と日にちを調べて年齢を調節していますが、実際に年齢を現在の日付から引いてみて、誕生日より前になれば1を引くという方法も考えられます。この場合は、以下の様なコードになります。

VB.NET
コードを隠すコードを選択
''' <summary>
''' 生年月日から年齢を計算する
''' </summary>
''' <param name="birthDate">生年月日</param>
''' <param name="today">現在の日付</param>
''' <returns>年齢</returns>
Public Shared Function GetAge(ByVal birthDate As DateTime, _
                              ByVal today As DateTime) As Integer
    Dim age As Integer = today.Year - birthDate.Year
    '現在の日付から年齢を引いた日付が誕生日より前ならば、1引く
    If today.AddYears(-age) < birthDate Then
        age -= 1
    End If

    Return age
End Function
C#
コードを隠すコードを選択
/// <summary>
/// 生年月日から年齢を計算する
/// </summary>
/// <param name="birthDate">生年月日</param>
/// <param name="today">現在の日付</param>
/// <returns>年齢</returns>
public static int GetAge(DateTime birthDate, DateTime today)
{
    int age = today.Year - birthDate.Year;
    //現在の日付から年齢を引いた日付が誕生日より前ならば、1引く
    if (today.AddYears(-age) < birthDate)
    {
        age--;
    }

    return age;
}

注意が必要なのは、生年月日に年齢を足した日付と現在の日付を比較する方法は正しくないということです。このことは「.net - How do I calculate someone's age in C#?」で指摘されており、例えば2000/02/29生まれの人の年齢を正しく計算できなくなります。

日付を8桁の整数にして引き算する方法

これも「.net - How do I calculate someone's age in C#?」で紹介されている方法です。

例えば現在の日付が 2012/9/21 で、生年月日が 1980/4/6 だとすると、20120921 から 19800406 を引いた数 320515 の末尾の4つの数字を削除した数 32 が年齢になるということです。

この方法を使ったコードの例は、以下のようになります。

VB.NET
コードを隠すコードを選択
''' <summary>
''' 生年月日から年齢を計算する
''' </summary>
''' <param name="birthDate">生年月日</param>
''' <param name="today">現在の日付</param>
''' <returns>年齢</returns>
Public Shared Function GetAge(ByVal birthDate As DateTime, _
                              ByVal today As DateTime) As Integer
    Return ((today.Year * 10000 + today.Month * 100 + today.Day) - _
            (birthDate.Year * 10000 + birthDate.Month * 100 + birthDate.Day)) \ 10000
End Function
C#
コードを隠すコードを選択
/// <summary>
/// 生年月日から年齢を計算する
/// </summary>
/// <param name="birthDate">生年月日</param>
/// <param name="today">現在の日付</param>
/// <returns>年齢</returns>
public static int GetAge(DateTime birthDate, DateTime today)
{
    return ((today.Year * 10000 + today.Month * 100 + today.Day) -
        (birthDate.Year * 10000 + birthDate.Month * 100 + birthDate.Day)) / 10000;
}

数え年を計算する

数え年では、生まれた年が1歳で、元日に1歳年を取ります。ですので、グレゴリオ暦だけ考慮すれば良いのであれば、計算は非常に簡単です。

以下に、グレゴリオ暦だけを考慮して数え年を計算する例を示します。

VB.NET
コードを隠すコードを選択
''' <summary>
''' 生年月日から数え年を計算する
''' </summary>
''' <param name="birthDate">生年月日</param>
''' <param name="today">>現在の日付</param>
''' <returns>年齢</returns>
Public Shared Function GetKazoedoshi(ByVal birthDate As DateTime, _
                                     ByVal today As DateTime) As Integer
    Return today.Year - birthDate.Year + 1
End Function
C#
コードを隠すコードを選択
/// <summary>
/// 生年月日から数え年を計算する
/// </summary>
/// <param name="birthDate">生年月日</param>
/// <param name="today">>現在の日付</param>
/// <returns>年齢</returns>
public static int GetKazoedoshi(DateTime birthDate, DateTime today)
{
    return today.Year - birthDate.Year + 1;
}
  • 履歴:
  • 2024/6/2 コメントでの指摘を受け、法令上の満年齢に関する記述を削除。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。