Как рассчитать количество недель в месяце - PullRequest
2 голосов
/ 21 мая 2010

Я хочу рассчитать общее количество недель в текущем месяце. Начиная с воскресенья или понедельника. Можно ли это сделать в Qt

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Я бы сказал, что эта проблема не относится к Qt, но Qt может помочь вам с классом QDate. С этим классом вы можете получить текущий месяц:

QDate CurrentDate = QDate::currentDate();

Количество дней данного месяца:

CurrentDate.daysInMonth();

Для расчета количества недель это зависит от того, хотите ли вы указать количество полных недель в месяце или количество недель с учетом неполных недель.

Что касается последнего, вот как я бы это сделал (учитывая, что неделя начинается в понедельник):

const DAYS_IN_WEEK = 7;
QDate CurrentDate = QDate::currentDate();
int DaysInMonth = CurrentDate.daysInMonth();
QDate FirstDayOfMonth = CurrentDate;
FirstDayOfMonth.setDate(CurrentDate.year(), CurrentDate.month(), 1);

int WeekCount = DaysInMonth / DAYS_IN_WEEK;
int DaysLeft = DaysInMonth % DAYS_IN_WEEK;
if (DaysLeft > 0) {
   WeekCount++;
   // Check if the remaining days are split on two weeks
   if (FirstDayOfMonth.dayOfWeek() + DaysLeft - 1 > DAYS_IN_WEEK)
      WeekCount++;
}

Этот код не был полностью протестирован и не гарантированно работает!

3 голосов
/ 21 мая 2010
floor(Number of Days / 7)
2 голосов
/ 22 ноября 2013

QDate :: weekNumber может дать вам номер недели в году.

Вот пример того, как использовать его для получения количества недель в месяце, включая те, которые короче, чем семь дней:

QDate dateCurrent = QDate::currentDate();
int year = dateCurrent.year(), month = dateCurrent.month(),
daysInMonth = dateCurrent.daysInMonth(), weeksInMonth;

weeksInMonth = QDate(year, month, daysInMonth).weekNumber()
    - QDate(year, month, 1).weekNumber() + 1;
...