Beispiel #1
0
        public string[] get_information(string[] list_befor_month, string[] list_curent_month, string[] list_after_month, int month, int year_number)
        {
            user_time UserTime   = new user_time();
            int       day_number = 0;
            int       count_week = 0;

            day_number = UserTime.number_day(1, month, year_number);

            int[] month_days = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            //если текущий год високосный - устанавливаем в феврале 28 дней
            if (((year_number % 4 != 0) && (year_number % 100 == 0)) ||
                ((year_number % 100 != 0) && (year_number % 400 != 0)))
            {
                month_days[1] = 28;
            }

            if ((month_days[month - 1] == 29 && (day_number == 6 || day_number == 7)) ||
                (month_days[month - 1] == 28 && (day_number == 6 || day_number == 7 || day_number == 1)) ||
                (day_number == 6 && month_days[month - 1] == 30))
            {
                count_week = 4;
            }
            else
            {
                count_week = 5;
            }

            string[] finish_arr = new string[5 * count_week * 2];

            if (day_number == 1)
            {
                int count_weeks_itr = 0;
                int i     = day_number - 1;
                int ipoch = 5 - (month_days[month - 1] - 28);
                int j     = 0;
                for (; j < finish_arr.Length / 2; j++)
                {
                    if (i == month_days[month - 1])
                    {
                        break;
                    }
                    finish_arr[j] = list_curent_month[i];
                    finish_arr[j + finish_arr.Length / 2] = list_curent_month[i + month_days[month - 1]];
                    i++;
                    if (i % 7 == 5)
                    {
                        i += 2;
                        count_weeks_itr++;
                    }
                }
                if (count_weeks_itr != count_week)
                {
                    for (int x = 0; x < ipoch; x++)
                    {
                        finish_arr[j] = list_after_month[x];
                        finish_arr[j + (finish_arr.Length / 2)] = list_after_month[x + month_days[month]];
                        j++;
                    }
                }
            }

            if (day_number >= 2 && day_number <= 5)
            {
                int count_weeks_itr = 0;
                int count           = day_number - 1;
                int f = 5 - count;
                int k = 0, i = 0;
                for (; k < count; k++)
                {
                    if (month == 1)
                    {
                        month = 13;
                    }
                    finish_arr[k] = list_befor_month[month_days[month - 2] - count + k];
                    finish_arr[k + (finish_arr.Length / 2)] = list_befor_month[list_befor_month.Length - count + k];
                }
                if (month == 13)
                {
                    month = 12;
                }
                int ipoch = 5 - UserTime.number_day(month_days[month - 1], month, year_number);

                for (; k < finish_arr.Length / 2; k++)
                {
                    finish_arr[k] = list_curent_month[i];
                    finish_arr[k + (finish_arr.Length / 2)] = list_curent_month[i + month_days[month - 1]];
                    if (i == month_days[month - 1] - 1)
                    {
                        k++;
                        break;
                    }
                    i++;
                    if (i % 7 == f)
                    {
                        i += 2;
                        count_weeks_itr++;
                    }
                }
                if (count_weeks_itr != count_week)
                {
                    for (int x = 0; x < ipoch; x++)
                    {
                        finish_arr[k] = list_after_month[x];
                        if (month == 12)
                        {
                            month = 0;
                        }
                        finish_arr[k + (finish_arr.Length / 2)] = list_after_month[x + month_days[month]];
                        k++;
                    }
                }
            }

            if (day_number == 6 || day_number == 7)
            {
                int count_weeks_itr = 0;
                int i = 1 + (7 - day_number);
                int z = 0;
                if (i == 2)
                {
                    z = 0;
                }
                else
                {
                    if (i == 1)
                    {
                        z = 6;
                    }
                }
                int ipoch = 5 - UserTime.number_day(month_days[month - 1], month, year_number);
                int j     = 0;
                for (; j < finish_arr.Length / 2; j++)
                {
                    finish_arr[j] = list_curent_month[i];
                    finish_arr[j + (finish_arr.Length / 2)] = list_curent_month[i + month_days[month - 1]];
                    if (i == month_days[month - 1] - 1)
                    {
                        j++;
                        break;
                    }
                    i++;
                    if (i % 7 == z)
                    {
                        i += 2;
                        count_weeks_itr++;
                    }
                }
                if (count_weeks_itr != count_week)
                {
                    for (int k = 0; k < ipoch; k++)
                    {
                        finish_arr[j] = list_after_month[k];
                        finish_arr[j + (finish_arr.Length / 2)] = list_after_month[k + month_days[month - 1]];
                        j++;
                    }
                }
            }
            return(finish_arr);
        }