某一个大神写的

改写了一点

请无视注释

//时间计算法则
/***********************************************************************************************/
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;
}
/***********************************************************************************************/

Qt 计算两个日前间隔天数的更多相关文章

  1. C语言计算两个日期间隔天数

    在网上看到了一个C语言计算日期间隔的方法,咋一看很高深,仔细看更高神,很巧妙. 先直接代码吧 #include <stdio.h> #include <stdlib.h> in ...

  2. Oracle 计算两个日期间隔的天数、月数和年数

    在Oracle中计算两个日期间隔的天数.月数和年数: 一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy' ...

  3. Java8 使用LocalDate计算两个日期间隔多少年,多少月,多少天

    最近项目遇到一个需要计算两个日期间隔的期限,需要计算出,整年整月整日这样符合日常习惯的说法,利用之前的Date和Calendar类会有点复杂,刚好项目使用了JDK8,那就利用起来这个新特性,上代码: ...

  4. java中计算两个日期之间天数的程序设计。

    //用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  5. js计算两个日期的天数差值

    js计算两个日期的天数差值 通过两个日期计算这两个日期之间的天数差值 /** * 计算天数差的函数,通用 * @param sDate1 * @param sDate2 * @returns {Num ...

  6. MYSQL如何计算两个日期间隔天数

    如何透过MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512') ...

  7. js计算两个日期相差天数

    //两个时间相差天数 兼容firefox chrome var days = function(startDate) { var sdate = new Date(startDate.replace( ...

  8. javaScript 计算两个日期的天数相差

    一:计算两个日期相差的天数 1 <html> <head> <meta http-equiv="Content-Type" content=" ...

  9. Java计算两个时间的天数差与月数差 LocalDateTime

    /**  * 计算两个时间点的天数差  * @param dt1 第一个时间点  * @param dt2 第二个时间点  * @return int,即要计算的天数差  */ public stat ...

随机推荐

  1. 2019.1.9 Mac安装Iterm2 终端(oh my zsh的安装与配置)

    Mac安装Iterm2 终端(oh my zsh的安装与配置) 安装 curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tool ...

  2. [转]MFC子线程更改图像数据后更新主窗口图像显示方法

    程序思路是由外部的输入输出控制卡发出采集图像信号,之后相机采集图像得到图像数据指针,接收图像数据指针创建成图像最后显示到MFC对话框应用程序的Picture Control控件上,同时,为了标定相机位 ...

  3. windows下如何安装pip以及如何查看pip是否已经安装成功?

    最近刚学习python,发现很多关于安装以及查看pip是否安装成的例子都比较老,不太适合于现在(python 3.6 )因此,下一个入门级别的教程. 0:首先如何安装python我就不做介绍了. 1: ...

  4. HTML5——前端预处理技术(Less、Sass、CoffeeScript)

    一.Less 1.1.概要 Less是一种动态样式语言,Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 将 C ...

  5. Linux 文件压缩与解压相关

    tar [-cxtzjvfpPN] 文件与目录 .... 参数:-c :建立一个压缩文件的参数指令-x :解开一个压缩文件的参数指令 -t :查看压缩文件里面的文件 特别注意: c/x/t 同时只能存 ...

  6. Google Performance工具,你还不会用?Git走起。

    2018俄罗斯世界杯如火如荼的进行中,第一轮各种冷门,让大家的确大跌眼界,尤其是那些买球的同志们,慌得一笔,还敢继续买吗?话说来,看球归看球,学习还是不能落下,我们来学习Chrome Devtool ...

  7. iOS7下Status Bar字体颜色修改

    原文来自这里:iOS7下Status Bar字体颜色修改. 旧项目在iOS7上遇到status bar字体颜色需要修改的问题,症状如下:导航栏设置为黑色后,iphone上status bar的字体颜色 ...

  8. 2018 CVTE 前端校招笔试题整理

    昨天晚上(7.20)做了CVTE的前端笔试,总共三十道题,28道多选题,2道编程题 .做完了之后觉得自己基础还是不够扎实,故在此整理出答案,让自己能从中得到收获,同时给日后的同学一些参考. 首先说一下 ...

  9. 在centos6.7通过源码安装python3.6.7报错“zipimport.ZipImportError: can't decompress data; zlib not available”

    在centos6.7通过源码安装python3.6.7报错: zipimport.ZipImportError: can't decompress data; zlib not available 从 ...

  10. Centos7验证Kickstart文件是否完整方法

    1.1    功能简介 CentOS 7 包含 ksvalidator 命令行程序,可使用该程序进行确认Kickstart文件.这个工具是 pykickstart 软件包的一部分.要安装pykicks ...