Qt 计算两个日前间隔天数
【摘要】
某一个大神写的
改写了一点
请无视注释
//时间计算法则/***********************************************************************************************/b...
某一个大神写的
改写了一点
请无视注释
-
//时间计算法则
-
/***********************************************************************************************/
-
bool Widget::IsLeap(int year)
-
{
-
return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0); //判断是否是软年
-
}
-
bool Widget::StringToDate(QString date ,int& year, int& month, int& day) //数据解析
-
{
-
year = date.mid(0,4).toInt(); //数据截取
-
month = date.mid(4,2).toInt(); //数据截取
-
day = date.mid(6,2).toInt(); //数据截取
-
-
int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //初始化12个月份的数据
-
if(IsLeap(year)) //如果是闰年,那么将2月的数据更新为29天
-
{
-
DAY[1] = 29;
-
}
-
return year >= 0 && month<=12 && month>0 && day<=DAY[month-1] && day>0; //日了狗了,写还不说给写个好的,这漏洞,差点出人命 //年天算法,判断数据解析是否符合日期规格
-
}
-
int Widget::DayInYear(int year, int month, int day)
-
{
-
int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
-
if(IsLeap(year))
-
DAY[1] = 29;
-
for(int i=0; i<month - 1; ++i)
-
{
-
day += DAY[i];
-
}
-
return day;
-
}
-
int Widget::DaysBetween2Date(QString date1, QString date2) //主调函数
-
{
-
//取出日期中的年月日
-
int year1, month1, day1;
-
int year2, month2, day2;
-
if(!StringToDate(date1, year1, month1, day1) || !StringToDate(date2, year2,month2,day2)) //调用截取函数
-
{
-
return -1; //如果截取信息失败,那么将返回-1
-
}
-
if(year1 == year2 && month1 == month2) //如果年月相同,则返回相信日期相减数据
-
{
-
return day1 > day2 ? day1 - day2 : day2 - day1;
-
}
-
else if(year1 == year2) //如果年份相同,
-
{
-
int d1, d2;
-
d1 = DayInYear(year1, month1, day1); //调用月份年年份函数来获得数据
-
d2 = DayInYear(year2, month2, day2);
-
return d1 > d2 ? d1 - d2 : d2 - d1;
-
}
-
else //如果年份不同,这重新计算
-
{
-
if(year1 > year2) //如果前方数据大于后方,这调换这两数据
-
{
-
swap(year1, year2); //这里使用了高端的交换两个数的方法 按亦或算法写的
-
swap(month1, month2);
-
swap(day1, day2);
-
}
-
int d1,d2,d3;
-
if(IsLeap(year1))
-
d1 = 366 - DayInYear(year1,month1, day1);
-
else
-
d1 = 365 - DayInYear(year1,month1, day1);
-
d2 = DayInYear(year2,month2,day2);
-
d3 = 0;
-
for(int year = year1 + 1; year < year2; year++)
-
{
-
if(IsLeap(year))
-
d3 += 366;
-
else
-
d3 += 365;
-
}
-
return d1 + d2 + d3;
-
}
-
}
-
void Widget::swap(int a,int b) //第一次使用这么高端的交换两个数
-
{
-
a=a^b;
-
b=a^b;
-
a=a^b;
-
}
-
/***********************************************************************************************/
文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。
原文链接:dreamlife.blog.csdn.net/article/details/47339439
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)