Можно ли как-то узнать количество дней в месяце средствами MQL? - страница 2

 
Integer:

В каких-то случаях неправильно считает?
при m==2
 
минутку)
 

Спасибо за помощь! Интересные мысли получил. Поскольку вычислять нужно для текущей даты, сделал почти как сказал Vinin, только глядя не назад, а вперёд:

int SECONDS_IN_DAY = 86400; //Количество секунд в дне (в сутках)

bool IsThereEndOfMonth() {  //Возвращает True если текущий день один из двух посленийх месяца
        return(
                Month() != TimeMonth(TimeCurrent() +  SECONDS_IN_DAY)   || //Текущий месяц не равен месяцу текущей даты + 1 день ИЛИ
                Month() != TimeMonth(TimeCurrent() + (SECONDS_IN_DAY * 2)) //Текущий месяц не равен месяцу текущей даты + 2 дня
        );
}

Огромное спасибо! :)

 
Исправил
 

У меня так:

    // 1.5.4. Метод возвращает количество дней в указанном месяце. В случае ошибок метод возвращает: "0" (введён неверный индекс ячейки).
    template <typename type> // Рекомендуемые знаковые типы: int, long, __int64, __time32_t, __time64_t.
    type DaysMonth(const WORD wLeapYear, // Диапазон значений:
                                         //  0 - не високосный год;
                                         //  1 - високосный год.
                   const WORD wMonth)    // Диапазон значений от 0 до 11 (от января до декабря).
     {// Переменные.
      tstringstream ssExclusion; // Строка с сообщением об ошибке.
      // Массив с количеством секунд в месяцах.                                                                             
      // Не високосный год:        Январь  Февраль     Март   Апрель      Май     Июнь     Июль   Август Сентябрь  Октябрь   Ноябрь  Декабрь
      const WORD awDayMonth[2][12] = {{31,      28,      31,      30,      31,      30,      31,      31,      30,      31,      30,      31},
      // Високосный год:           Январь  Февраль     Март   Апрель      Май     Июнь     Июль   Август Сентябрь  Октябрь   Ноябрь  Декабрь
                                      {31,      29,      31,      30,      31,      30,      31,      31,      30,      31,      30,      31}};
      // Контроль введённых номеров ячеек первого измерения.
      if (wLeapYear >= 2)
       {
        if (DEBUGGING || DEBUGGING_EXCLUSION)
         {
          ssExclusion << std::endl << _T("Ошибка в методе \"Utils::Time<") + StringTemplate() + _T(">::DaysMonth()\".")
                      << std::endl << _T("Введён неверный индекс первого измерения wLeapYear = ") << wLeapYear << std::endl;
          if (DEBUGGING) tcout << ssExclusion.str();
          if (DEBUGGING_EXCLUSION) throw(ssExclusion.str());
         }
        return(0);
       }
      // Контроль введённых номеров ячеек второго измерения.
      if (wMonth >= 12)
       {
        if (DEBUGGING || DEBUGGING_EXCLUSION)
         {
          ssExclusion << std::endl << _T("Ошибка в методе \"Utils::Time<") + StringTemplate() + _T(">::DaysMonth()\".")
                      << std::endl << _T("Введён неверный индекс второго измерения wMonth = ") << wMonth << std::endl;
          if (DEBUGGING) tcout << ssExclusion.str();
          if (DEBUGGING_EXCLUSION) throw(ssExclusion.str());
         }
        return(0);
       }
      // Возвращаем содержимое массива.
      return(type(awDayMonth[wLeapYear][wMonth]));
     }

Это для вычисления високосности:

    // 1.5.6. Метод определяет високосность года для указанной даты. Метод возвращает "1", если год високосный, иначе 0.
    template <typename type1, typename type2> // Рекомендуемые знаковые типы для type1: int, long, __int64, __time32_t, __time64_t. Рекомендуемые типы для type2: __time32_t, __time64_t, wtime.
    type1 LeapYear(const type2 t2Time)  // Дата, представленная в виде количества временных отрезков, установленных шаблоном класса.
     {// Структура SYSTEMTIME хранит дату и время используя отдельные поля для месяца, дня, года, дня недели, часа, минут, секунд и миллисекунд.
      WORD wYear = TimeToSystemTime(t2Time).wYear;
      if(wYear % 400 == 0) return(1); // Год високосный.
      if(wYear % 100 == 0) return(0); // Год не високосный.
      if(wYear % 4 == 0) return(1);   // Год високосный.
      return(0); // Год не високосный.
     }
 
Integer:
Исправил
Есть ошибка в выслении високосности.
 
Zhunko:
Есть ошибка в выслении високосности.

Давайте без бла бла бла, а посуществу.
 
Integer:

Давайте без бла бла бла, а посуществу.
Давайте посмотрим на мой код? :-))
 
Zhunko:
Давайте посмотрим на мой код? :-))
Посмотрите
 

Зунко, у вас больше нет повода для городости собственной персоной, только как вываливание замороченного кода?

if(DEBUGGING || DEBUGGING_EXCLUSION), if (DEBUGGING), if (DEBUGGING_EXCLUSION), throw(), еще комментов в пять раз больше чем кода - и это только для того, чтобы взять числа из массива. Брррррррррррр....

Причина обращения: