C# で指定した曜日の日を取得

C# (.NET) で曜日を扱うには、 DateTime と DayOfWeek を使用します。

サンプルとして、引数で指定した曜日で、指定日から最も近い未来日 (当日を含む) を取得するソースを以下に示します。このソースでは、 DayOfWeek の値を int に変換して、曜日の計算を行っています。

/// <summary>
/// 引数で指定した曜日で、指定日から最も近い未来日 (当日を含む) を返す
/// </summary>
/// <param name="day">対象の日</param>
/// <param name="wantDayOfWeek">希望曜日</param>
/// <returns>最も近い未来日</returns>
/// <remarks>引数で指定した日と曜日が同一の場合、そのままの日が返る</remarks>
public static DateTime GetNearestDayOfWeek(DateTime day, DayOfWeek wantDayOfWeek)
{
    DayOfWeek dayOfWeek = day.DayOfWeek;

    if (dayOfWeek == wantDayOfWeek)
    {
        return day;
    }
    else
    {
        return day.AddDays(
            ((int)(DayOfWeek.Saturday - day.DayOfWeek + wantDayOfWeek) % 7) + 1);
    }
}

実行例を以下に示します。戻り値 monday には、今日を含む最も近い未来日の日付 (引数で指定した月曜日) が返されます。

// 今日から最も近い月曜日を取得する
DateTime monday = GetNearestDayOfWeek(DateTime.Today, DayOfWeek.Monday);