Qt 计算两个日前间隔天数

简介: 某一个大神写的 改写了一点 请无视注释
//时间计算法则
/***********************************************************************************************/
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;
}
/***********************************************************************************************/
目录
相关文章
|
8月前
Qt 中md5 计算
Qt 中md5 计算
115 0
|
8月前
Qt 计算字符串和文件的md5 值
Qt 计算字符串和文件的md5 值
160 0
|
6月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
208 1
|
5月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
128 0
|
4月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
101 0
|
4月前
|
5月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
224 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
5月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
5月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03