Member 13932867 Ответов: 2

Получить последнюю дату месяца в формате YYYYMMDD на языке C++


В настоящее время в моем коде я получу некоторую дату из файла, читающего как 'CString tsDate' в формате YYYYMMDD(например: 20180501)
и мне нужно проверить, является ли 'tsDate является последний день этого месяца. Это означает, что в мае месяце это 20180531, так что я должен был получить эту дату.

В моем коде в настоящее время я использую класс COleDateTime для получения GetMonth() и GetYear.

Может ли кто-нибудь предложить мне получить последнее число месяца?

Что я уже пробовал:

Я попробовал следующее :
int getNumberOfDays(int месяц, int год)
{
//условие високосного года, если месяц равен 2
если( месяц == 2)
{
если((год%400==0) || (год%4==0 && год%100!=0))
возвращение 29;
еще
возвращение 28;
}
//месяцы, которые имеют 31 день
иначе если(месяц == 1 || месяц == 3 || месяц == 5 || месяц == 7 || месяц == 8
||месяц == 10 || месяц==12)
возвращение 31;
еще
возврат 30;
}

Но здесь месяцы жестко закодированы, но каждый год количество дней может меняться, верно?

2 Ответов

Рейтинг:
1

CPallini

Цитата:
Но здесь месяцы жестко закодированы, но каждый год количество дней может меняться, верно?
Просто февральские дни могут отличаться, во всяком случае, опубликованный код правильно обрабатывает их.

В качестве альтернативы вы также можете добавить один день к своему COleDateTime объект (с использованием 1-дневного COleDateTimeSpan объект) и посмотреть, есть ли месячное изменение.


Рейтинг:
0

Patrice T

Цитата:
Но здесь месяцы жестко закодированы, но каждый год количество дней может меняться, верно?

Как можно не знать, как работает Григорианский календарь, и иметь правильный код ?
Вопрос давайте зададимся вопросом, если вы просто знаете, как это работает, и что вы не нашли в интернете :
Григорианский календарь - Википедия[^]