C ++中给定月份的星期一,星期二等的数量

时间:2019-02-28 22:19:15

标签: c++

我已经能够检索任何给定月份的第一天,并且我也知道该月中有多少天。我如何计算每月剩余的星期一,星期二等的数量?下面是我的代码。

//Set Days in Month
if(Time.Month == 2)
    {
    if((Time.Year % 400 == 0) || ((Time.Year % 4 == 0) && (Time.Year % 100 != 0)))
        Weekend_Status.Month_Days[Time.Month] = 29;
    else    
        Weekend_Status.Month_Days[Time.Month] = 28;
    }
else if(Time.Month == 1 || Time.Month == 3 || Time.Month == 5 || Time.Month == 7 || Time.Month == 8 || Time.Month == 10 || Time.Month == 12)
    {
    Weekend_Status.Month_Days[Time.Month] = 31;
    }
else
    {
    Weekend_Status.Month_Days[Time.Month] = 30;
    }

//Set New Month Start Day
if(Time.Day == 1 && Time.Hour == 0 && Time.Minute == 0 && Time.Second == 1)
    {
    switch(Time.Day_of_Week)
        {
        case 0: //Sunday
            Weekend_Status.Month_Start_Day = 0;
            break;
        case 1: //Monday
            Weekend_Status.Month_Start_Day = 1;
            break;
        case 2: //Tuesday
            Weekend_Status.Month_Start_Day = 2;
            break;
        case 3: //Wednesday
            Weekend_Status.Month_Start_Day = 3;
            break;
        case 4: //Thursday
            Weekend_Status.Month_Start_Day = 4;
            break;
        case 5: //Friday
            Weekend_Status.Month_Start_Day = 5;
            break;
        case 6: //Saturday
            Weekend_Status.Month_Start_Day = 6;
            break;
        }   
    }

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作,利用模运算符,利用该运算符对发生日期的月份中的所有天进行计数。注意:未经测试。

    // example: count how many Wednesdays
    int search_day = 3; 
    int search_day_count = 0;
    int start_day = Weekend_Status.Month_Start_Day;
    int end_day = Weekend_Status.Month_Days[Time.Month];

    // loop through all days for the given month
    for (int day = start_day; day <= start_day + end_day; day++)
    {
        // count all days that are 7 days apart starting from search_day = 3
        if (day == search_day || (day - search_day) % 7 == 0)
        {
            search_day_count++;
        }
    }