我想计算当月的总周数。从周日或周一开始。 是不是可以在Qt
中做答案 0 :(得分:3)
floor(Number of Days / 7)
答案 1 :(得分:3)
我想说这个问题不是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++;
}
此代码尚未经过全面测试,无法保证工作!
答案 2 :(得分:2)
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;
答案 3 :(得分:0)
有些月份有4周,而其他月份则有5周。Qt状态that:
根据ISO 8601,星期从星期一开始,一年的第一个星期四始终在该年的第1周。大多数年份有52周,但有些有53周。
为此,我每月的第一个星期四是计算一个月中的周数的起点。下面的功能对我有用:
int myClass::weeksInMonth(QDate cdate)
{
QDate sDte = QDate(cdate.year(),cdate.month(),1);
QDate eDte = QDate(cdate.year(),cdate.month(),cdate.daysInMonth());
int wks = 0;
for(QDate stD = sDte; stD <= eDte; stD = stD.addDays(1)){
if(stD.dayOfWeek() == Qt::Thursday)++wks;
}
return wks;
}
答案 4 :(得分:0)
这是一个包装PyQt5最佳答案的函数。但是,第01周的ISO 8601定义是公历年的第一个星期四。该解决方案将在某些年份的12月和1月产生负数个星期。.
def weeksInMonth(date: QDate):
year = date.year(), month = date.month()
daysInMonth = date.daysInMonth()
return QDate(year, month, daysInMonth).weekNumber()[0] - QDate(year, month, 1).weekNumber()[0] + 1