2014年08月06日

C#で指定された日の存在する週を求める

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その31

■問題
年、月、日を入力すると、指定された日の存在する週の月曜日から金曜日までを 出力するコードを書いてください。 週が月や年をまたぐケースが正しく動いているかに気をつけて投稿してください。
このお題は匿名での投稿をもとに作成しました。ご投稿ありがとうございます。

作成したGetWeekDaysメソッドは、与えられた日が存在する週の月曜日から金曜日までに日にちを列挙するメソッドです。
DayOfWeek列挙体の値の範囲は 0 (DayOfWeek.Sunday) 〜 6 (DayOfWeek.Saturday) なので、 現在の日から、DayOfWeek列挙体の値(intにしたもの)を引けば、日曜日が求まります。
これが求まれば、月曜日から金曜日を求めるのは簡単ですね。
DateTime構造体を使ってるので、月や年をまたぐケースは特に意識する必要はないです。 

PrintWeekDaysメソッドは、このGetWeekDaysメソッドを呼び出した結果を出力しています。

■C#で書いたコード

using System; using System.Collections.Generic; using System.Linq; namespace Doukaku.Org { class Program { static void Main(string[] args) { PrintWeekDays(new DateTime(2013,9, 27)); Console.WriteLine(); PrintWeekDays(new DateTime(2013, 11, 1)); Console.WriteLine(); PrintWeekDays(new DateTime(2013, 12, 31)); Console.WriteLine(); Console.ReadLine(); } static void PrintWeekDays(DateTime date) { var days = GetWeekDays(date).ToList(); days.ForEach(dt => Console.WriteLine(dt.ToString("yyyy/MM/dd (ddd)"))); } static IEnumerable<DateTime> GetWeekDays(DateTime date) { // 日曜日の日を求める int dow = (int)date.DayOfWeek; date = date.AddDays(-dow); // 月から金までを返す for (int i = 1; i < 6; i++) yield return date.AddDays(i); } } }


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52379834