Qt - 获取两个日期时间对象之间的时间跨度

3
我有两个日期时间对象,比如"2013-06-13 11:00:45"和"2013-06-14 09:03:23"。
我该如何获取这两个日期时间之间的时间跨度(以"X天,X小时,X分钟,X秒"的形式)?

1
简单的替代方案是Qt的TimeDelta类: https://github.com/cardinalby/time_delta - Cardinal
2个回答

6

QTime 可以帮助格式化 QDateTime::secsTo 方法 (由@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"

默认情况下,日期使用本地时区。QDateTime::secsTo()在查找差异之前将日期转换为“自纪元以来的秒数”,即,如果在日期之间存在DST转换或UTC偏移由于任何其他原因而更改,则将其考虑在内(如果相应的C mktime()支持给定平台上的它)。 POSIX时间不计算闰秒(您可以使用“正确”的时区来计算闰秒)。


5
目前,您必须使用QDateTime::secsTo,然后进行计算以确定天数、小时数、分钟数和秒数。 然而,Qt正在计划添加一个QTimeSpan类: https://qt.gitorious.org/qt/qt/merge_requests/1014。 目前尚不清楚这将何时添加到Qt中;该合并请求已经有将近2年的历史了。但是,如果您愿意,您可以从上述合并请求中获取代码并将其编译到您的项目中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接