我有兩個日期時間對象,比如說「2013-06-13 11:00:45」,「2013-06-14 09:03:23」。Qt - 獲取兩個日期時間對象之間的時間跨度
如何獲得這兩個日期時間之間的時間間隔(形式爲「X天,X小時,X分鐘,X秒」)?
我有兩個日期時間對象,比如說「2013-06-13 11:00:45」,「2013-06-14 09:03:23」。Qt - 獲取兩個日期時間對象之間的時間跨度
如何獲得這兩個日期時間之間的時間間隔(形式爲「X天,X小時,X分鐘,X秒」)?
目前,你必須使用QDateTime::secsTo
,然後做數學題,找出天,小時,分鐘和秒。
然而,有計劃的QTimeSpan
類添加到Qt的:
https://qt.gitorious.org/qt/qt/merge_requests/1014
目前尚不清楚何時會被添加到Qt的;合併要求已經快2年了。但是,您可以從上述合併請求中獲取代碼,並根據需要將其編譯到您的項目中。
QTime
可有助於格式化的QDateTime::secsTo
method(mentioned 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時間不會計算閏秒(您可以使用「正確」的時區,計算躍點秒數)。
簡單的辦法是TimeDelta類的Qt: https://github.com/cardinalby/time_delta – Cardinal