Спасибо за помощь! Интересные мысли получил. Поскольку вычислять нужно для текущей даты, сделал почти как сказал 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); // Год не високосный.
}
Зунко, у вас больше нет повода для городости собственной персоной, только как вываливание замороченного кода?
if(DEBUGGING || DEBUGGING_EXCLUSION), if (DEBUGGING), if (DEBUGGING_EXCLUSION), throw(), еще комментов в пять раз больше чем кода - и это только для того, чтобы взять числа из массива. Брррррррррррр....
В каких-то случаях неправильно считает?
Спасибо за помощь! Интересные мысли получил. Поскольку вычислять нужно для текущей даты, сделал почти как сказал Vinin, только глядя не назад, а вперёд:
Огромное спасибо! :)
У меня так:
Это для вычисления високосности:
Исправил
Есть ошибка в выслении високосности.
Давайте без бла бла бла, а посуществу.
Давайте без бла бла бла, а посуществу.
Давайте посмотрим на мой код? :-))
Зунко, у вас больше нет повода для городости собственной персоной, только как вываливание замороченного кода?
if(DEBUGGING || DEBUGGING_EXCLUSION), if (DEBUGGING), if (DEBUGGING_EXCLUSION), throw(), еще комментов в пять раз больше чем кода - и это только для того, чтобы взять числа из массива. Брррррррррррр....