QT计算时间差的方法详解

 更新时间:2023年12月21日 11:04:14   作者:Acnidouwo  
这篇文章主要为大家详细介绍了利用QT实现计算两个时间的时间差的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

QT计算时间差,两次时间的间隔

项目计算码流需要用到计算时间差

QT版本

利用secsTo函数

    QDateTime startTime=  QDateTime::currentDateTime();
    Sleep(5000);
    QDateTime endTime=  QDateTime::currentDateTime();
    qint64 intervalTime = startTime.secsTo(endTime); //求时间差
    qint64 intervalTimeMS = startTime.msecsTo(endTime);
 
 
    qDebug() << intervalTime;  //时间相差秒数
    qDebug() << intervalTimeMS; //时间相差毫秒数

C++版本

获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒。

#include <time.h>  
#include <stdio.h>  
int main()  
{  
    time_t start ,end ;  
    double cost;  
    time(&start);  
    sleep(1);  
    time(&end);  
    cost=difftime(end,start);  
    printf("%f/n",cost);  
    return 0;  
}  

方法补充

1、得出的结果单位是:天(不足一天为0,没有半天的说法)

    QDateTime time1 = QDateTime::fromString("2022-4-25 16:40:02", "yyyy-MM-dd HH:mm:ss");
 
    QDateTime time2 = QDateTime::fromString("2022-4-27 16:43:02", "yyyy-MM-dd HH:mm:ss");
 
    int days = time1.daysTo(time2);
 
    qDebug() << "time2 - time1=" << days ;

2、得出的结果单位是:秒或毫秒

    QDateTime time1 = QDateTime::fromString("2022-4-25 16:40:02", "yyyy-MM-dd HH:mm:ss");
 
    QDateTime time2 = QDateTime::fromString("2022-4-25 16:43:02", "yyyy-MM-dd HH:mm:ss");
 
    int seconds = time1.secsTo(time2);
 
    int msec = time2.msecsTo(time1);
 
    qDebug() << "time2 - time1=" << seconds << msec;

日期较往后的时间 放在括号内,不然得出的结果就是负数

3、获取当前日期,精确到毫秒

    //获取当前的时间
    QDateTime dTime =QDateTime::currentDateTime();
    QString sTime =dTime.toString("yyyy-MM-dd hh:mm:ss:zzz");

注:小时那里HH和hh的区别, 比如下午三点,HH就是15,hh就是03

4、时间转时间戳

方式一:toTime_t,这种方法转成时间戳的时候只能精确到s,不能直接在后面*1000就代表能精确到ms了,这是错的!

    QDateTime dTime =QDateTime::currentDateTime();
    dTime.setTimeSpec(Qt::LocalTime);//一定一定要设置。不然后面通过时间戳转过来的日期对不上
    int iCutTimeStamp = dTime.toTime_t(); //将当前时间转为时间戳 s 
   

这种方法的时间戳转时间对应的方法是:

<strong>QDateTime dateTime1 = QDateTime::fromTime_t(cut_timestamp2);</strong>

方式二:可以精确到ms

    QDateTime date = QDateTime::currentDateTime();
    //基础单位为豪秒 时间戳
    qDebug() << time1.toMSecsSinceEpoch();

这种方法对应的时间戳转时间的方法是:

 QDateTime dd = QDateTime::fromMSecsSinceEpoch(date.toMSecsSinceEpoch());
 qDebug() << dd.toString("yyyy-MM-dd hh:mm:ss");

注:int值超过10位就会溢出,用时间戳计算时间差的时候用秒为单位即可,不然用ms为单位来计算会出bug的

Qt计算两个时间字符串的时差

bool LicenseOperation::daysSpacing(QString arg1, QString arg2 ,int days)
{
    QDateTime start,end;
    end = QDateTime::fromString(arg1,"yyyyMMdd");
    start = QDateTime::fromString(arg2,"yyyyMMdd");
    validLicenseDays = start.daysTo(end); //求时间差;
    if(days > validLicenseDays){
        validLicenseDays = days - validLicenseDays;
        return true;
    }else{
        validLicenseDays = 0;
        return false;
    }
}

QT DateTime计算时间差

QDateTime t1 = QDateTime::fromString("2020-08-03 00:00:00", "yyyy-MM-dd hh:mm:ss");
qDebug() << t1.toString("yyyy-MM-dd hh:mm:ss");

QDateTime t2 = QDateTime::fromString("2020-08-03 00:00:10", "yyyy-MM-dd hh:mm:ss");
qDebug() << t2.toString("yyyy-MM-dd hh:mm:ss");

int seconds = t2.toTime_t() - t1.toTime_t();
qDebug() << "相差:" << seconds << "秒"; // 相差: 10 秒
qDebug() << "相差:" << seconds * 1000 << "毫秒"; // 相差: 10000 毫秒

int msecs = t2.toMSecsSinceEpoch() - t1.toMSecsSinceEpoch(); // 相差: 10000 毫秒
qDebug() << "相差:" << msecs << "毫秒";

到此这篇关于QT计算时间差的方法详解的文章就介绍到这了,更多相关QT计算时间差内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C++的反调试技术与绕过手法

    详解C++的反调试技术与绕过手法

    反调试技术,恶意代码会用它识别自身是否被调试,或者让调试器失效,给反病毒工程师们制造麻烦,拉长提取特征码的时间线,本章将具体总结常见的反调试基础的实现原理以及如何过掉这些反调试手段,从而让我们能够继续分析恶意代码
    2021-06-06
  • C++使用智能指针实现模板形式的单例类

    C++使用智能指针实现模板形式的单例类

    这篇文章主要为大家详细介绍了C++使用了智能指针实现模板形式的单例类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Visual Studio 2019 DLL动态库连接实例(图文教程)

    Visual Studio 2019 DLL动态库连接实例(图文教程)

    这篇文章主要介绍了Visual Studio 2019 DLL动态库连接实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码

    C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码

    这篇文章主要介绍了C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • vs2019 Com组件初探之简单的COM编写及实现跨语言调用的方法

    vs2019 Com组件初探之简单的COM编写及实现跨语言调用的方法

    这篇文章主要介绍了vs2019 Com组件初探之简单的COM编写及实现跨语言调用的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Qt实现部件透明阴影效果与不规则窗体详解

    Qt实现部件透明阴影效果与不规则窗体详解

    这篇文章主要为大家详细介绍了Qt实现部件透明阴影效果与不规则窗体的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-01-01
  • C++中std::optional的使用指南分享

    C++中std::optional的使用指南分享

    C++ 17 引入了std::optional,表示一个可能有值的对象,这篇文章主要来和大家聊聊std::optional的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 利用C语言实现任务调度的示例代码

    利用C语言实现任务调度的示例代码

    这篇文章主要为大家详细介绍了如何利用纯C语言实现任务调度(可用于STM32、C51等单片机),文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-04-04
  • 浅谈C/C++中的static与extern关键字的使用详解

    浅谈C/C++中的static与extern关键字的使用详解

    本篇文章是对C/C++中的static与extern关键字的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Qt利用QPainter实现基本绘图的示例详解

    Qt利用QPainter实现基本绘图的示例详解

    Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。本文主要和大家介绍一下QPainter实现的基本绘图,感兴趣的可以了解一下
    2022-12-12

最新评论