1. 程式人生 > >QT時間相關的使用(日期相減問題)

QT時間相關的使用(日期相減問題)

Qt兩個日期相減的問題

首先,由日期與時間戳的相互轉換
QDateTime time = QDateTime::currentDateTime();   //獲取當前時間  
int timeT = time.toTime_t();                     //將當前時間轉為時間戳  

將一定格式的日期轉換為時間戳
QString starttime ="2017-11-11 12:00:00";
QString endtime = "2017-11-13 12:00:01";
QDateTime start = QDateTime::fromString(starttime, "yyyy-MM-dd hh:mm:ss");
QDateTime end = QDateTime::fromString(endtime, "yyyy-MM-dd hh:mm:ss");
uint stime = start.toTime_t();
uint etime = end.toTime_t();

與toTime_t()功能相反的是fromTime_t(),把時間戳轉為QDateTime型別。因為這個方法是靜態的,所以使用方法為
QDateTime time = QDateTime::fromTime_t(timeT);  

兩個日期相隔的天數由時間戳來相減得到
 int ndaysec = 24*60*60;
 qDebug() << "Day = " << (etime - stime)/(ndaysec) + ((etime - stime)%(ndaysec)+(ndaysec-1))/(ndaysec) - 1;

注意:上面的計算中,天數相隔時間差24小時內為0天,可以這樣理解,26小時大於24小時(一天),那麼他們相差1天了,如果24小時內為1天計算,26小時大於24小時,那麼就將後面的減一去掉就可以了。

Qt獲取前幾天的時間

 QDateTime time = QDateTime::currentDateTime();//獲取系統現在的時間
 QString str = time.toString("yyyy-MM-dd"); //設定顯示格式
 QString BeforeDaystr=time.addDays(-1).toString("yyyy-mm-dd");//獲取前一天時間


具體上程式碼:

#include <QCoreApplication>
#include <QString>
#include <QDateTime>
#include <QTime>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString starttime ="2017-11-11 12:00:00";
    QString endtime = "2017-11-13 12:00:01";
    QDateTime start = QDateTime::fromString(starttime, "yyyy-MM-dd hh:mm:ss");
    QDateTime end = QDateTime::fromString(endtime, "yyyy-MM-dd hh:mm:ss");
    uint stime = start.toTime_t();
    uint etime = end.toTime_t();
    qDebug() << "starttime" << starttime;
    qDebug() << "endtime" << endtime;
    qDebug() << "......................";

    qDebug() << "etime" << etime;
    qDebug() << "stime" << stime;
    qDebug() << "etime - stime" << etime - stime;

    int ndaysec = 24*60*60;
    qDebug() << "Day = " << (etime - stime)/(ndaysec) + ((etime - stime)%(ndaysec)+(ndaysec-1))/(ndaysec) - 1;

    return a.exec();
}

結果如下: