2013-06-13 2 views
3

"2013-06-13 11:00:45", "2013-06-14 09:03:23"과 같이 두 개의 datetime 객체가 있습니다.Qt - 두 datetime 객체 사이의 시간 범위를 가져옵니다.

"X 일, X 시간, X 분, X 초"형식으로이 두 datetimes 사이의 시간 간격을 어떻게 얻을 수 있습니까?

+1

간단한 대안은 Qt의 TimeDelta 클래스입니다. https://github.com/cardinalby/time_delta – Cardinal

답변

4

현재 QDateTime::secsTo을 사용하고 일,시, 분 및 초를 계산하려면 수학을 수행해야합니다.

그러나, Qt는에 QTimeSpan 클래스를 추가 할 계획이 있습니다 :

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

이 Qt를 추가 얻을 때 그것은 명확하지 않다; 병합 요청은 이미 거의 2 년 전입니다. 그러나 위의 병합 요청에서 코드를 가져 와서 원하는대로 프로젝트에 컴파일 할 수 있습니다.

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" 

기본적으로 날짜는 ocal 시간대. QDateTime::secsTo()은 차이를 찾기 전에 날짜를 "초로부터의 초"로 변환합니다. 즉, 날짜 또는 UTC 오프셋 사이에 DST 전환이있는 경우 다른 이유로 인해 오프셋이 고려됩니다 (해당 C mktime()이 주어진 플랫폼). POSIX 시간은 윤년을 세지 않습니다 ("오른쪽"시간대를 사용하여 도약 초를 계산할 수 있습니다).

관련 문제