1年の週数を計算したいと思います。この投稿を見ました
この投稿では、受け入れられた回答で次のコードを使用します。
public static int GetIso8601WeekOfYear(DateTime time)
{
// Seriously cheat. If its Monday, Tuesday or Wednesday, then it'll
// be the same week# as whatever Thursday, Friday or Saturday are,
// and we always get those right
DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
{
time = time.AddDays(3);
}
// Return the week of our adjusted day
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
しかし、問題があります。月の最終日が日曜日の場合、週番号が繰り返されます。
たとえば、2013 年 3 月の最終日は日曜日です。今週は13日、正解です。しかし、4 月では、C# が 1 か月に常に 6 週間を使用して週数を計算する方法は、4 月の最初の週に 4 月の日がありません。したがって、C# では 4 月の最初の週は 15 週目ですが、これは正しくなく、14 週目である必要があります。
それで、正しい方法で週数を計算する方法があるかどうか知りたいです。
編集:
私はこれを意味します:
3 月の最終週は次のとおりです。
25 26 27 28 29 30 31
これは13番目です、正しいです。
4 月の最初の週は次のとおりです。
1 2 3 4 5 6 7
そして今週は15日として計算されます。
したがって、3 月のカレンダーを見ると最後の週は 13 日と計算され、4 月のカレンダーを見ると 3 月の最後の週は 14 日と計算されます。これは正しくありません。
解決:
DateTime dtCalendar = Calendar.DisplayDate;
int gridRow = (int)GetValue(Grid.RowProperty);
// Return the week of our adjusted day
int wueekNumber= System.Globalization.CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(dtCalendar, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday);
if (dtCalendar.DayOfWeek == DayOfWeek.Monday)
{
gridRow = gridRow - 1;
}
Text = (weekNumbe r+ gridRow - 1).ToString();
ありがとう。