0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】「〇曜日の日付」を取得する方法

Last updated at Posted at 2019-01-29

「今日の曜日」「月末日の曜日」など日付から曜日を取得するのは比較的簡単ですが、逆に「〇曜日の日付が知りたい」という場合は少々手間がかかります。
例えば「定休日が水曜日の時、休みとなる水曜日の日付を全て取得する」といった時には、以下のコードが役に立つかもしれません。

コード

DateUtil.cs
public class DateUtils
{
    /// <summary>
    /// 対象年の指定された曜日に該当する日付を全て取得する
    /// </summary>
    /// <param name="targetYear">対象年</param>
    /// <param name="wantDayOfWeek">対象となる曜日。この曜日に合致する日付を取得する。</param>
    /// <returns>対象年における、指定した曜日の日付のリスト。</returns>
    public static List<DateTime> FindWantDayOfWeek(int targetYear, DayOfWeek wantDayOfWeek)
    {
        // 対象年の1月1日(元旦)の曜日を取得する。
        DateTime gantan = new DateTime(targetYear, 1, 1);

        // 対象年の1月において、引数で指定した曜日に該当する最初の日付を取得する
        DateTime date;

        if (gantan.DayOfWeek == wantDayOfWeek)
        {
            date = gantan;
        }
        else
        {
            int additionalDay = ((int)(DayOfWeek.Saturday - gantan.DayOfWeek + wantDayOfWeek) % 7) + 1;
            date = gantan.AddDays(additionalDay);
        }

        // 7日ずつ日付をずらして、対象年における指定した曜日の日付を全て取得する。
        List<DateTime> days = new List<DateTime>();
        while (date.Year == targetYear)
        {
            days.Add(date);
            date = date.AddDays(7);
        }

        return days;
    }
}

コードの実行

テストコード

UnitTestDateUtils.cs
[TestClass]
public class UnitTestDateUtils
{
    [TestMethod]
    public void TestFindWantDayOfWeek()
    {
        // 2019年の日曜日の日付を取得する。
        var days = DateUtils.FindWantDayOfWeek(2019, DayOfWeek.Sunday);
        var sunday2019 = string.Join(",", days.Select(day => day.ToString("yyyy/MM/dd")));
        System.Console.WriteLine(sunday2019);
    }

}

テストコードの実行結果

2019/01/06,2019/01/13,2019/01/20,2019/01/27,2019/02/03,2019/02/10,2019/02/17,2019/02/24,2019/03/03,2019/03/10,2019/03/17,2019/03/24,2019/03/31,2019/04/07,2019/04/14,2019/04/21,2019/04/28,2019/05/05,2019/05/12,2019/05/19,2019/05/26,2019/06/02,2019/06/09,2019/06/16,2019/06/23,2019/06/30,2019/07/07,2019/07/14,2019/07/21,2019/07/28,2019/08/04,2019/08/11,2019/08/18,2019/08/25,2019/09/01,2019/09/08,2019/09/15,2019/09/22,2019/09/29,2019/10/06,2019/10/13,2019/10/20,2019/10/27,2019/11/03,2019/11/10,2019/11/17,2019/11/24,2019/12/01,2019/12/08,2019/12/15,2019/12/22,2019/12/29
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?