QT计算两个日期之间的月份数

        数据库中单表数据存储量过大时,会造成数据库的查询统计速度变慢,因此需将单表数据拆分存储到按年月命名的多张数据表中。解决思路是获取单表中的最小时间和最大时间,然后计算两个时间中的月份数量,最后根据开始年月循环算出所有需要拆分的年月名称,生成对应的数据表名,并将对应年月的数据存储到多张数据表中。

        计算两个日期之间的相关函数如下:

// 计算两个日期之间的月份数
int Tools::MonthsBetween2Date(QString date1, QString date2)                                                             //主调函数
{                                                                                                                        //取出日期中的年月日int year1, month1, day1;int year2, month2, day2;QString datelast,datenow;datelast=date1;datenow=date2;QRegExp exp("[年月日-:-: ]");datelast =datelast.replace(exp,"");datenow =datenow.replace(exp,"");qDebug()<<datelast;qDebug()<<datenow;if(datenow<datelast){return -1;}if(!StringToDate(datelast, year1, month1, day1) || !StringToDate(datenow, year2,month2,day2))                           //调用截取函数{return -1;                     //如果截取信息失败,那么将返回-1}if(year1 == year2)                 //如果年份相同,则返回月份相减数据{if(month1 == month2){return 0;}else{return month1 > month2 ? month1 - month2 : month2 - month1;}}else                                                   //如果年份不同,则重新计算{if(year1 > year2)                                  //如果前方数据大于后方,这调换这两数据{swap(year1, year2);                            //按亦或算法交换两个数swap(month1, month2);swap(day1, day2);}int m1 = MonthInYear(month1);int m2 = 12 - MonthInYear(month2) + 1;int m3 = 0;for(int year = year1 + 1; year < year2; year++){for(int k = month1; k <= 12; k++){m3 += 1;}}return m1 + m2 + m3;}
}
//字符串转年月日
bool Tools::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;         //年天算法,判断数据解析是否符合日期规格
}
//判断是否是闰年
bool Tools::IsLeap(int year)
{return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0);                     //判断是否是润年
}
//计算一年中的剩余月份数量
int Tools::MonthInYear(int month)
{int intMonth = 0;for(int k = month; k <= 12; k++){intMonth += 1;}return intMonth;
}
//交换两个数
void Tools::swap(int a,int b)
{a=a^b;b=a^b;a=a^b;
}

      举例:开始时间为2023-01-01 00:00:00,结束时间为2024-03-04 08:30:00,调用代码

QString date1 = "2023-01-01 00:00:00";
QString date2 = "2024-03-04 08:30:00";
int TotalMonth = MonthsBetween2Date(date1, date2);

  计算的出来的月份数量为15个月。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring事务管理

一、事务的基本概念 事务是一系列的操作&#xff0c;它们要么全部完成&#xff0c;要么全部不完成&#xff0c;是一个不可分割的工作单位。事务的处理必须满足其四个基本特性&#xff0c;即原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff0…

软件测试的基本概念

目录 1.测试需求 2.测试用例的概念 3.bug 4.软件生命周期 4.1需求分析 4.2计划 4.3编码 4.4测试 4.5运行维护 5.测试模型 5.1敏捷开发模型 5.2scrume 5.3测试模型 5.4w模型(双v模型) 6.软件测试的生命周期 7.BUG的描述和定义 8.如何定义bug的级别 9.BUG的…

机器学习——线性回归

机器学习——线性回归 文章目录 机器学习——线性回归一、什么是线性回归二、一元线性回归方程三、损失函数四、代码实现五、运用说明 一、什么是线性回归 线性回归是一种用来建立自变量和因变量之间线性关系的统计分析方法&#xff0c;也是机器学习中最常见、最容易理解的一个…

Java面试篇【RabbitMQ】常见面试题(2024最新)

RabbitMQ 1.为什么使用MQ?优点是什么 因为MQ可以异步处理&#xff0c;提高系统吞吐量。 应用解耦&#xff0c;系统之间可以通过消息通信&#xff0c;不关心其他系统的处理。 流量削峰&#xff0c;可以通过消息队列的长度&#xff0c;控制请求量。可以缓解短时间内的高并发请…

无线电信号及其分类

有线与无线通信 通信&#xff1a;指信息的交流与传递。 有线通信&#xff1a;用导向性传输媒体&#xff0c;即信息流沿着固体媒体传播。 例如电报、座机都是沿导线传送信号。 无线通信&#xff1a;用非导向性传输媒体&#xff0c;即在自由空间中被传播。分为红外线、电磁波等…

TCP/IP超全笔记 - TCP篇

TCP/IP超全笔记 - TCP篇 什么是 TCP TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一对一&#xff0c;先连接&#xff0c;再传输数据可靠交付&#xff1a;…

openGauss gsql 常用元命令 一

openGauss gsql 常用元命令 一 连接数据库 使用 -E 参数可以显示元命令具体执行的 SQL 信息 [ommog1 ~]$ gsql -d postgres -p15400 -E gsql ((openGauss 2.1.0 build 590b0f8e) compiled at 2021-09-30 14:29:04 commit 0 last mr ) Non-SSL connection (SSL connection is…

【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引

一、聚簇索引 其实之前内容中介绍的 B 树就是聚簇索引。 这种索引不需要我们显示地使用 INDEX 语句去创建&#xff0c;InnoDB 引擎会自动创建。另外&#xff0c;在 InnoDB 引擎中&#xff0c;聚簇索引就是数据的存储方式。 它有 2 个特点&#xff1a; 特点 1 使用记录主键…

HTTPS安全机制解析:如何保护我们的数据传输

引言 在数字时代&#xff0c;网络安全成为了互联网用户和服务提供者不可忽视的关键议题。特别是&#xff0c;HTTPS&#xff08;全称为HyperText Transfer Protocol Secure&#xff09;相比于其前身HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;通过引…

如何恢复已删除的华为手机图片?5 种方式分享

不幸的现实是&#xff0c;华为的珍贵时刻有时会因为意外删除、软件故障或其他不可预见的情况而在眨眼之间消失。在这种情况下&#xff0c;寻求恢复已删除的图片成为个人迫切关心的问题。 本文旨在为用户提供如何从华为恢复已删除图片的实用解决方案。我们将探索五种可行的方法…

6-1 判回文

作者 唐艳琴 单位 中国人民解放军陆军工程大学 本题要求实现一个函数&#xff0c;判断字符串是否是回文。如果是则返回1&#xff0c;否则返回0。 函数接口定义&#xff1a; int isecho(char a[]);返回值为1&#xff0c;表示是回文&#xff1b;返回值为0&#xff0c;表示不是…

光线追踪5- Surface normals and multiple objects

首先&#xff0c;让我们获取一个表面法线&#xff0c;以便进行着色。这是一个垂直于交点处表面的向量。在我们的代码中&#xff0c;我们需要做一个重要的设计决定&#xff1a;法线向量是否为任意长度&#xff0c;还是将其归一化为单位长度。 诱人的是&#xff0c;如果不…

视频远程监控平台EasyCVR集成后播放只有一帧画面的原因排查与解决

智慧安防视频监控平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台可支持的接入协议包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议…

【STM32下UART协议的一些认识与使用方法】

STM32下UART协议的一些认识与使用方法 串口定义通用串行异步收发器 协议中相关的概念空闲位起始位数据位奇偶校验位三种校验方式BT接收数据的流程 停止位波特率总结 UART的三种工作方式UART控制器发送数据流程接收数据流程 UART初始化UART相关结构体和库函数 串口定义 通用串行…

揭秘共享旅游卡项目变现的6种方式,至少有4种适合创业者!

最近每天都有不少的朋友添加我&#xff0c;多数人会问一个问题&#xff0c;共享旅游卡这个项目好不好做&#xff1f;还有部分朋友会问&#xff0c;共享旅游卡有没有市场&#xff0c;是不是有我们所宣传的这样乐观&#xff1f; 从过年前开始&#xff0c;我一直在关注咱们共享旅…

自然语言处理之语言模型(LM)深度解析

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;作为人工智能的一个重要分支&#xff0c;近年来在学术界和工业界均取得了显著的进展。语言模型&#xff08;Language Model, LM&#xff09;是自然语言处理技术中的基石&#xff0c;它能够预测…

云计算 3月6号 (crontab-计划任务 日志轮转 免密登录)

一、计划任务 计划任务概念解析 在Linux操作系统中&#xff0c;除了用户即时执行的命令操作以外&#xff0c;还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务&#xff08;如定期备份、定期采集监测数据&#xff09;。RHEL6系统中默认已安装了at、crontab软件…

抖音视频评论区用户采集工具使用教程

抖音视频评论区用户采集工具是一款用于收集抖音视频评论区用户信息的工具。通过该工具&#xff0c;用户可以提取抖音视频评论区的用户昵称、评论内容、点赞数等信息&#xff0c;并进行数据分析和统计。该工具可以帮助用户了解抖音视频评论区的用户特点和评论趋势&#xff0c;提…

基于Spring Boot + Vue的信息化在线教学平台

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

事务 失效的八种情况

在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同时写入多张表的数据。为了保证操作的原子性&#xff08;要么同时成功&#xff0c;要么同时失败&#xff09;&#xff0c;避免数据不一致的情况&#xff0c;我们一般都会用到 spring 事务。 确实&#xff0c;sprin…