2013-06-13 78 views
3

我有兩個日期時間對象,比如說「2013-06-13 11:00:45」,「2013-06-14 09:03:23」。Qt - 獲取兩個日期時間對象之間的時間跨度

如何獲得這兩個日期時間之間的時間間隔(形式爲「X天,X小時,X分鐘,X秒」)?

+1

簡單的辦法是TimeDelta類的Qt: https://github.com/cardinalby/time_delta – Cardinal

回答

4

目前,你必須使用QDateTime::secsTo,然後做數學題,找出天,小時,分鐘和秒。

然而,有計劃的QTimeSpan類添加到Qt的:

https://qt.gitorious.org/qt/qt/merge_requests/1014

目前尚不清楚何時會被添加到Qt的;合併要求已經快2年了。但是,您可以從上述合併請求中獲取代碼,並根據需要將其編譯到您的項目中。

2

QTime可有助於格式化的QDateTime::secsTo methodmentioned by @RA)結果的部分小於一天例如,t.toString("hh:mm:ss.zzz")或:

#include <QString> 
#include <QTime> 

/// seconds as "X days, X hours, X minutes, X seconds" string 
QString secondsToString(qint64 seconds) 
{ 
    const qint64 DAY = 86400; 
    qint64 days = seconds/DAY; 
    QTime t = QTime(0,0).addSecs(seconds % DAY); 
    return QString("%1 days, %2 hours, %3 minutes, %4 seconds") 
    .arg(days).arg(t.hour()).arg(t.minute()).arg(t.second()); 
} 

實施例:

#include <QDateTime> 
#include <QDebug> 

int main() 
{ 
    QString format = "yyyy-MM-dd HH:mm:ss"; 
    QDateTime a = QDateTime::fromString("2013-06-13 11:00:45", format); 
    QDateTime b = QDateTime::fromString("2013-06-14 09:03:23", format); 
    qDebug() << secondsToString(a.secsTo(b)); 
} 

輸出:

"0 days, 22 hours, 2 minutes, 38 seconds" 

默認情況下,日期使用你的l ocal時區。 QDateTime::secsTo()找到差即前的日期,以「自紀元秒」轉換,如果有日期或UTC偏差具有用於任何其它原因則是考慮到的變化之間的DST轉換(如果相應的C mktime()支持它上的給定平臺)。 POSIX時間不會計算閏秒(您可以使用「正確」的時區,計算躍點秒數)。

相關問題