小陆所在的公司实行周末单双休,即一周只休周日,下一周休周六日,如此轮换。已知2016年8月13-14日是双休,输入年月日,以yyyymmdd的格式,如20160814,输出当天是否休息,(不考虑法定节假日)
要求:不能使用时间、日期相关的库函数
/*思路 首先给的日期是一个字符串 建立一个日期类Date 内含属性 年月日 构造函数将字符串转为年月日
* 然后(日期 - 给定日期) 得到的总天数取余14结果为6 12 13的日子为休息日
* 其中有两个注意点 一个是闰年二月天数+1 一个是计算日期差值天数为旧年天数 加上 新年天数 */class Date { public: Date(); Date(QString str) { int n1=1000; int n2=10; int n3 =10; QString strTemp; numYear = 0; numMonth = 0; numDay = 0; int i; for(i=0;i<4;i++) { strTemp = str[i]; numYear += strTemp.toInt()*n1; n1/=10; } for(i=4;i<6;i++) { strTemp = str[i]; numMonth += strTemp.toInt()*n2; n2/=10; } for(i=6;i<8;i++) { strTemp = str[i]; numDay += strTemp.toInt()*n3; n3/=10; } } //计算差值 int getDay(Date* d) { int sum=0; switch (d->numMonth) { case 12: sum+=30; case 11: sum+=31; case 10: sum+=30; case 9: sum+=31; case 8: sum+=31; case 7: sum+=30; case 6: sum+=31; case 5: sum+=30; case 4: sum+=31; case 3: sum+=getYearDays(d->numYear)-365+28; case 2: sum+=31; case 1: sum+=0; } sum+=d->numDay; //以上为求出该年的新年天数 if(d->numYear == 2016) { return sum - 227;//227为20160814的该年的前八个+14天的天数 } else if(d->numYear>2016) { for(int i=2017;i<d->numYear;i++) { sum+=getYearDays(i); } sum+=365-227; } return sum;//返回日期和给定日期的总差值天数 } //判断闰年 int getYearDays(int year) { if((year%4 == 0 && year %100!=0) || (year%400 == 0)) { return 366; } else { return 365; } } bool isRest(Date *one) { switch(one->getDay(one)%14) { case 6: case 12: case 13: qDebug()<<one->getDay(one); return true; default: return false; } } private: int numYear; int numMonth; int numDay; }; //调用 void MainWindow::on_pushButton_clicked() { Date *d1 = new Date("20210920"); qDebug()<< d1->isRest(d1); }