int g_nCheckYear = 1901; //校验年份
int g_nCheckMonth = 0; //校验月份
int g_nCheckDay = 0; //校验日
int g_nCheckHour = 0; //校验时
int g_nCheckMinute; //校验分
int g_nEndYear = 0; //截止年份
int g_nEndMonth = 0; //截止月份
int g_nEndDay = 0; //截止日
int g_nEndHour = 0; //截止时
int g_nEndMinute = 0; //截止分
2、全局函数
//判断是否是闰年
bool isLeap(int y)
if((y % 4 == 0) && (y % 100 != 0)) //是闰年
return true;
else if(y % 400 == 0) //是闰年
return true;
else //不是闰年
return false;
//判断 y年m月 共有的天数
int daysOfMonth(int y,int m)
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(m != 2)
return days[m-1];
return 28 + isLeap(y);
3、计算截止日期
bool calEndTime(int nUseDays)
if(nUseDays <= 0)
return false;
//【1】获取系统当前时间
QDateTime local(QDateTime::currentDateTime());
//【2】校验日期初始化为系统当前时间
g_nCheckYear = local.toString("yyyy").toInt();
g_nCheckMonth = local.toString("MM").toInt();
g_nCheckDay = local.toString("dd").toInt();
g_nCheckHour = local.toString("hh").toInt();
g_nCheckMinute = local.toString("mm").toInt();
//【3】计算截止日期
//剩余时间
int tempSurplusTime = nUseDays;
//初始化 截止年、日、时、分 为 当前时间
g_nEndYear = g_nCheckYear;
g_nEndDay = g_nCheckDay;
g_nEndHour = g_nCheckHour;
g_nEndMinute = g_nCheckMinute;
//创建临时变量 当前月、下个月,初始化为当前日期的月
int tempCurrMonth = g_nCheckMonth;
int tempNextMonth = g_nCheckMonth;
//计算当前月共有多少天
int tempDaysOfMonth = daysOfMonth(g_nEndYear, tempCurrMonth);
//判断 剩余时间 是否可以将当前月剩余天数补全
if(tempSurplusTime > (tempDaysOfMonth - g_nEndDay)) //如果可以将当前月剩余天数补全 且 有剩余
tempSurplusTime = tempSurplusTime - (tempDaysOfMonth - g_nEndDay);
//判断当前月是否是 12月
if(tempCurrMonth < 12) //不是
tempNextMonth += 1;
else //是
tempNextMonth = 1;
g_nEndYear += 1; //年份 加1
//截止日 临时设置为 当前月 月底
g_nEndDay = tempDaysOfMonth;
else //如果剩余时间 刚好可以将当前月剩余天数补全 或者不能将当前月剩余天数补全
g_nEndDay += tempSurplusTime; //截止日 就是tempSurplusTime 之后的那天
g_nEndYear = g_nCheckYear;
g_nEndMonth = g_nCheckMonth;
// 结束操作
return true;
//连续计算下个月的天数,用剩余时间 与它比较
while(true)
//计算下个月共有多少天
int tempDaysOfMonth = dateManage.daysOfMonth(g_nEndYear, tempNextMonth);
//判断下个月是否是 12月
if(tempNextMonth < 12) //不是
//判断 剩余时间 是否大于 下个月天数
if(tempSurplusTime > tempDaysOfMonth) //剩余时间 大于 下个月天数
tempSurplusTime -= tempDaysOfMonth;
tempNextMonth += 1;
else //剩余时间 小于或等于 下个月天数
g_nEndMonth = tempNextMonth; //截止月 即是 下个月
g_nEndDay = tempSurplusTime; //截止日 即是 剩余时间
break;
else //是
//判断 剩余时间 是否大于 下个月天数
if(tempSurplusTime > tempDaysOfMonth) //剩余时间 大于 下个月天数
tempSurplusTime -= tempDaysOfMonth;
tempNextMonth = 1;
g_nEndYear += 1; //年份 加1
else //剩余时间 小于或等于 下个月天数
g_nEndMonth = tempNextMonth; //截止月 即是 下个月
g_nEndDay = tempSurplusTime; //截止日 即是 剩余时间
break;
return true;
1、全局变量int g_nCheckYear = 1901; //校验年份int g_nCheckMonth = 0; //校验月份int g_nCheckDay = 0; //校验日int g_nCheckHour = 0; //校验时int g_nCheckMinute; //校验分int g_nEndYea...
int g_nCheckYear = 1901; //校验年份
int g_nCheckMonth = 0; //校验月份
int g_nCheckDay = 0; //校验日
int g_nCheckHour = 0; //校验时
int g_nCheckM...
输入一个日期:startdate(年月日)和天数(days>=1),输出字该输入日期days天的日期enddate(即enddate=startdate+days)要求输入和输出的年份为四位整数,并确保得到有效的输入数据。同时需要考虑跨年和闰年等情况,闰年用自定义函数计算,日期自定义结构体描述。 #include "stdio.h"
int Is_Special_Year(int year);
#include <cstdio>
int month[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},
{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
bool Isleap(int year)
return ((year%4==0...
/// @brief 计算前N天或者后N的日期
/// @param[in] cDateIn : 输入,格式"2019-03-11 12:00:00"
/// @param[in] n : 前N天,输入-N;后N天,则输入N
/// @param[out] cDateOut : 输出,格式"2019-03-11 12:00:00"
/// @return...
C++线性表是一种数据结构,用于存储和操作一系列元素。而计算工作日天数可以通过线性表来实现。
在C++中,可以使用数组或者向量(vector)来实现线性表。你可以将日期作为元素存储在线性表中,并编写相应的算法来计算工作日天数。
以下是一个简单的示例代码,用于计算两个日期之间的工作日天数:
```cpp
#include <iostream>
#include <vector>
// 判断是否为工作日
bool isWorkday(int year, int month, int day) {
// 在这里编写判断逻辑,判断给定的日期是否为工作日
// 返回true表示是工作日,返回false表示不是工作日
// 计算两个日期之间的工作日天数
int calculateWorkdays(int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {
int workdayCount = 0;
// 将起始日期和结束日期转换为整数表示,方便计算
int startDate = startYear * 10000 + startMonth * 100 + startDay;
int endDate = endYear * 10000 + endMonth * 100 + endDay;
// 遍历起始日期到结束日期之间的每一天
for (int date = startDate; date <= endDate; date++) {
int year = date / 10000;
int month = (date % 10000) / 100;
int day = date % 100;
// 判断当前日期是否为工作日
if (isWorkday(year, month, day)) {
workdayCount++;
return workdayCount;
int main() {
// 示例:计算2022年1月1日到2022年12月31日之间的工作日天数
int workdays = calculateWorkdays(2022, 1, 1, 2022, 12, 31);
std::cout << "工作日天数:" << workdays << std::endl;
return 0;
在上述示例代码中,`isWorkday`函数用于判断给定的日期是否为工作日,你可以根据实际需求编写判断逻辑。`calculateWorkdays`函数用于计算两个日期之间的工作日天数,它通过遍历起始日期到结束日期之间的每一天,并调用`isWorkday`函数来判断是否为工作日,最后返回工作日天数。
InvalidArgumentError: Each axis in Attr(axes) should be in the range of [0, -1]But current axis is:2
weixin_39891230: