私はこの問題についてちょっと立ち往生しています。特定の日付を選択したときに、月暦の土曜日の値を取得するにはどうすればよいですか。
例:月間カレンダーで2月14日を選択しました。それを選択すると、土曜日の「2011年2月19日」を含むプロンプトが表示されるか、2月24日を選択すると、プロンプトに「2011年2月26日」と表示されます。
私はこの問題についてちょっと立ち往生しています。特定の日付を選択したときに、月暦の土曜日の値を取得するにはどうすればよいですか。
例:月間カレンダーで2月14日を選択しました。それを選択すると、土曜日の「2011年2月19日」を含むプロンプトが表示されるか、2月24日を選択すると、プロンプトに「2011年2月26日」と表示されます。
// This function will return the next saturday for a datetime
DateTime NextSaturday(DateTime now)
{
while (now.DayOfWeek != DayOfWeek.Saturday)
now = now.AddDays(1);
return now;
}
アップデート
ほぼ2年後、私はこの答えを変えたいと思います。
最近では、の「効用関数」を作成することはありませんclass
。私は今、常にクラスを「拡張」しています。署名はになりますDateTime.Next(DayOfWeek)
。拡張機能の詳細については、http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspxを参照してください。
また、論理が間違っています。が土曜日の場合now
、常に現在の日付が返されます。now
ほとんどの発信者は、それが+7日戻ることを期待していると思います。したがって、最初の変更は次のとおりです。
DateTime NextSaturday(DateTime now)
{
do {
now = now.AddDays(1);
} while (now.DayOfWeek != DayOfWeek.Saturday)
return now;
}
次に、任意の曜日で機能するように関数を変更します。
DateTime Next(DateTime now, DayOfWeek nextDay)
{
do {
now = now.AddDays(1);
} while (now.DayOfWeek != nextDay)
return now;
}
次に、DateTimeクラスを「拡張」してNext(DayOfWeek)をサポートします。
namespace DateTime.Extensions
{
public static class DateTimeExtensions
{
public static DateTime Next(this DateTime now, DayOfWeek nextDay)
{
do {
now = now.AddDays(1);
} while (now.DayOfWeek != nextDay)
return now;
}
}
}
DateTime add = DateTime.Now; //From popup box
int add = (((int)selected.DayOfWeek) + 1;
if(add != 7) {
selected = selected.AddDays(add);
}