在论坛回答了别人的帖子,就顺便在这里记录一下,当然网上已经有很多现成的方法,但我看了下还是觉得我的最简单,呵呵
/// <summary>
/// 获取指定日期在该年中属于第几个星期
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static int GetWeeksInYear(this DateTime date)
{
return GetWeeks(date.DayOfYear + (int)new DateTime(date.Year, 1, 1).DayOfWeek);
}
/// <summary>
/// 获取指定日期在该月中属于第几个星期
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static int GetWeeksInMonth(this DateTime date)
{
return GetWeeks(date.Day + (int)new DateTime(date.Year, date.Month, 1).DayOfWeek);
}
private static int GetWeeks(int days)
{
int weeks = days / 7;
if (days % 7 != 0)
{
weeks++;
}
return weeks;
}
思路是用当前日期跟第一天的日期差,并将每年(月)第一天向前补全一周,然后以此为基础进行周计算
这个是按照微软默认的标准星期天是每周的第一天,如果要转换成其他的话,比如周一是第一天,那只要把(int)new DateTime(date.Year, date.Month, 1).DayOfWeek这部分处理一下就可以了