我有两个日期时间对象,比如“2013-06-13 11:00:45”,“2013-06-14 09:03:23”。
如何获得这两个日期之间的时间跨度(以“X天,X小时,X分钟,X秒”的形式)?
答案 0 :(得分:4)
目前,您必须使用QDateTime::secsTo
,然后进行数学计算,以确定天,小时,分钟和秒。
但是,有计划在Qt:
中添加QTimeSpan
类
https://qt.gitorious.org/qt/qt/merge_requests/1014
目前尚不清楚何时将其添加到Qt;合并请求已经差不多2年了。但是,如果您愿意,可以从上面的合并请求中获取代码并将其编译到项目中。
答案 1 :(得分: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"
默认情况下,日期使用您的本地时区。 QDateTime::secsTo()
在找到差异之前将日期转换为“自纪元以来的秒数”,即,如果日期之间存在DST转换,或者UTC偏移因任何其他原因而发生变化,则将其考虑在内(如果相应的{ {3}}在给定平台上支持它)。 POSIX时间不计算闰秒(您可以使用“正确”的时区来计算跳跃秒数。)