问题不在于该月的天数,而在于它跨越了多少周。
非闰年的 2 月将有 28 天,如果该月的第一天是星期一,则 2 月将恰好跨越 4 周数字。
但是,如果该月的第一天是星期二或一周中的任何其他日期,则 2 月将跨越 5 个周数。
一个 31 天的月份可以以同样的方式跨越 5 或 6 周。如果该月从星期一开始,则 31 天为您提供 5 个周数。如果月份从星期六或星期日开始,它将跨越 6 周数。
所以获取这个数字的正确方法是找到该月的第一天和最后一天的周数。
编辑#1:这是计算给定月份跨度的周数的方法:
编辑#2:修复了代码中的错误
public static Int32 GetWeekForDateCurrentCulture(DateTime dt)
{
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
Calendar cal = culture.Calendar;
return cal.GetWeekOfYear(dt,
culture.DateTimeFormat.CalendarWeekRule,
culture.DateTimeFormat.FirstDayOfWeek);
}
public static Int32 GetWeekSpanCountForMonth(DateTime dt)
{
DateTime firstDayInMonth = new DateTime(dt.Year, dt.Month, 1);
DateTime lastDayInMonth = firstDayInMonth.AddMonths(1).AddDays(-1);
return
GetWeekForDateCurrentCulture(lastDayInMonth)
- GetWeekForDateCurrentCulture(firstDayInMonth)
+ 1;
}