我想计算一个月内的周数。
2014年1月的第一周从第一个星期一开始是第6周。所以,1月有4个星期。 从第一个星期一开始,2014年3月的第一周是第3周。所以,三月有5个星期。
我想知道一个月内有多少个星期从第一个星期一算起,而不是第一天。
我该怎么做?
我有这段代码,但它用于获取特定日期的月份周数。
public int GetWeekNumberOfMonth(DateTime date)
{
date = date.Date;
DateTime firstMonthDay = new DateTime(date.Year, date.Month, 1);
DateTime firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
if (firstMonthMonday > date)
{
firstMonthDay = firstMonthDay.AddMonths(-1);
firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
}
return (date - firstMonthMonday).Days / 7 + 1;
}
答案 0 :(得分:15)
试试这个:
获取当月的天数,找到第一天。对于该月中的每一天,查看该日是否为星期一,如果是,则递增该值。
public static int MondaysInMonth(DateTime thisMonth)
{
int mondays = 0;
int month = thisMonth.Month;
int year = thisMonth.Year;
int daysThisMonth = DateTime.DaysInMonth(year, month);
DateTime beginingOfThisMonth = new DateTime(year, month, 1);
for (int i = 0; i < daysThisMonth; i++)
if (beginingOfThisMonth.AddDays(i).DayOfWeek == DayOfWeek.Monday)
mondays++;
return mondays;
}
您可以像当前日期一样使用它:
Console.WriteLine(MondaysInMonth(DateTime.Now));
<强>输出:强> 4
或您选择的任何月份:
Console.WriteLine(MondaysInMonth(new DateTime(year, month, 1)))
答案 1 :(得分:2)
只需更正Cyral代码:
我必须从0开始,因为他正在使用AddDays方法。
原因:以上示例为NOV返回5,为DEC返回4,这是错误的。
编辑代码:
public static int MondaysInMonth(DateTime thisMonth)
{
int mondays = 0;
int month = thisMonth.Month;
int year = thisMonth.Year;
int daysThisMonth = DateTime.DaysInMonth(year, month);
DateTime beginingOfThisMonth = new DateTime(year, month, 1);
for (int i = 0; i < daysThisMonth; i++)
if (beginingOfThisMonth.AddDays(i).DayOfWeek == DayOfWeek.Monday)
mondays++;
return mondays;
}
答案 2 :(得分:2)
我尝试使用该代码,但在某些情况下它并没有起作用。所以我在MSDN上找到了这段代码。
public static int MondaysInMonth(this DateTime time)
{
//extract the month
int daysInMonth = DateTime.DaysInMonth(time.Year, time.Month);
var firstOfMonth = new DateTime(time.Year, time.Month, 1);
//days of week starts by default as Sunday = 0
var firstDayOfMonth = (int)firstOfMonth.DayOfWeek;
var weeksInMonth = (int)Math.Ceiling((firstDayOfMonth + daysInMonth) / 7.0);
return weeksInMonth;
}
我创建它就像一个扩展方法,所以我可以这样使用:
var dateTimeNow = DateTime.Now;
var weeks = dateTimeNow.MondaysInMonth();