我想计算一年中的周数。我看到这个帖子
在这篇文章中,接受的答案使用以下代码:
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 号,是正确的。但是在四月,C#如何使用一个月中总是6周来计算周数,四月的第一周没有四月的任何一天,因为所有的日子都属于三月,因为一周的最后一天是3月30日。所以 C# 说 4 月的第一周是第 15 周,但这是不正确的,它必须是第 14 周。
所以我想知道是否有任何方法可以正确计算一周的数量。
编辑:
我的意思是:
三月的最后一周是这样的:
25 26 27 28 29 30 31
这是第13个,是正确的。
四月的第一周是:
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();
谢谢。