计算一个月中的星期一数

时间:2014-04-29 00:54:44

标签: c#

我想计算一个月内的周数。

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;
}

3 个答案:

答案 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();