端くれプログラマの備忘録 C# [C#] 開始年齢と終了年齢を指定して、その年齢になる任意の生年月日をランダムに取得する

[C#] 開始年齢と終了年齢を指定して、その年齢になる任意の生年月日をランダムに取得する

C#で指定した開始年齢と終了年齢の範囲内で、ランダムに生年月日を取得するコードを作成する方法は以下の通りです。

アプローチ

  1. 年齢を元に生年月日を計算します。開始年齢と終了年齢に対して、その年齢になる日付をランダムに選びます。
  2. 例えば、終了年齢の場合、DateTime.Nowからその年齢を引いた日付が最大生年月日になります。
  3. ランダムな生年月日を計算するには、開始年齢と終了年齢の範囲内で年齢に対応する日付を生成します。

実装コード

using System;

class Program
{
    static void Main()
    {
        // 開始年齢と終了年齢を指定
        int startAge = 20;
        int endAge = 50;

        // ランダムな生年月日を取得
        DateTime randomBirthDate = GetRandomBirthDate(startAge, endAge);

        // 結果を表示
        Console.WriteLine($"ランダムな生年月日: {randomBirthDate:yyyy-MM-dd}");
    }

    static DateTime GetRandomBirthDate(int startAge, int endAge)
    {
        Random random = new Random();
        DateTime today = DateTime.Today;

        // 終了年齢に対応する生年月日
        DateTime maxBirthDate = today.AddYears(-endAge);

        // 開始年齢に対応する生年月日
        DateTime minBirthDate = today.AddYears(-startAge);

        // ランダムに年齢範囲内の日数を取得
        int rangeInDays = (minBirthDate - maxBirthDate).Days;
        DateTime randomBirthDate = maxBirthDate.AddDays(random.Next(rangeInDays));

        return randomBirthDate;
    }
}

解説

1. 開始年齢と終了年齢を指定:

    • startAgeendAge で年齢の範囲を指定します。

    2. DateTime.Today:

      • DateTime.Today は今日の日付を取得します。これを基に年齢を計算します。

      3. 生年月日の範囲を計算:

        • today.AddYears(-endAge) は、終了年齢に対応する最大生年月日(現在から終了年齢分前の日付)を計算します。
        • today.AddYears(-startAge) は、開始年齢に対応する最小生年月日(現在から開始年齢分前の日付)を計算します。

        4. random.Next():

          • random.Next(rangeInDays) で、最大生年月日から最小生年月日までの間でランダムな日数を生成し、その日数分を最大生年月日に加えることでランダムな生年月日を取得します。

          使用例

          • 開始年齢: 20歳
          • 終了年齢: 50歳

          ランダムな生年月日が例えば 1985-06-15 のように表示されます。

          注意

          • このコードは年齢の範囲を基に生年月日を計算しますが、うるう年や月の日数を考慮して正確に計算しています。