在论坛回答了别人的帖子,就顺便在这里记录一下,当然网上已经有很多现成的方法,但我看了下还是觉得我的最简单,呵呵
/// <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这部分处理一下就可以了