1ヶ月(開始日と終了日として定義)をとり、その月の各週の日付範囲のセットを返す必要があります。 1週間は、日曜日から土曜日までを定義します。 10/1〜10/1、10/2:これは、ある月に毎週見つけるのに適したアルゴリズムですか?
http://i54.tinypic.com/j58sh0.png
2011年10月の月の6週間を持っている:スタートバーで、Windowsの日にあなたをダブルクリックがあれば、それを視覚化するための良い方法です10/8,10/9-10/15,10/16-10/22,10/23-10/29および10/30-10/31である。
私は、構造体として毎週記述することができます。
struct Range
{
public DateTime Start;
public DateTime End;
public Range(DateTime start, DateTime end)
{
Start = start;
End = end;
}
}
私は月を取り、その中の範囲の配列を返す関数を記述する必要があります。ここで動作するように表示され、明白なエッジケースに対処し、私の最初の試みは、です:
public static IEnumerable<Range> GetRange(DateTime start, DateTime end)
{
DateTime curStart = start;
DateTime curPtr = start;
do
{
if (curPtr.DayOfWeek == DayOfWeek.Saturday)
{
yield return new Range(curStart, curPtr);
curStart = curPtr.AddDays(1);
}
curPtr = curPtr.AddDays(1);
} while (curPtr <= end);
if(curStart <= end)
yield return new Range(curStart, end);
}
私は同じことを行うにはクリーナー以上の明白なアプローチがありますかどうかを知りたいと思います。私はパフォーマンスについて心配していませんが、コードの読みやすさを向上させ、アルゴリズムをより簡潔にしたいと思います。おそらく、単一のLINQ式などを含む非常に創造的なソリューションがあります。ありがとう!
http://codereview.stackexchange.com/ –
:-)実行されません、
ToList
またはToArray
を使用して結果を「実体化」することを忘れないでくださいサイドノート:もしあなたが国際的に行く予定があるなら、日曜日に始まる週を定義することはできません! –ありがとう!私はそのサイトを知らなかった。 –