我希望QDateTime覆盖 - 运算符并返回一个QTimeSpan,表示两个QDateTimes之间的差异(就像.NET的TimeSpan一样)。由于Qt中不存在,我决定实现它。
不幸的是,QDateTime没有类似msecsTo
的功能。将两个QDateTimes之间的差异精确到毫秒的最简洁方法是什么?
答案 0 :(得分:11)
我意识到这个问题是从2010年开始的,那时Qt 4.7并不存在(它实际上是在这个问题最初被问到 - 2010年9月21日之后一周左右出现的),但对于那些人来说正在寻找如何做到这一点:
从Qt 4.7开始,QDateTime有一个" msecsTo"方法。请参阅http://doc.qt.io/qt-4.8/qdatetime.html#msecsTo上的Qt 4.8文档。
QDateTime dateTime1 = QDateTime::currentDateTime();
// let's say exactly 5 seconds pass here...
QDateTime dateTime2 = QDateTime::currentDateTime();
qint64 millisecondsDiff = dateTime1.msecsTo(dateTime2);
// millisecondsDiff is equal to 5000
答案 1 :(得分:7)
我可能会使用a.daysTo(b)*1000*60*60*24 + a.time().msecsTo(b.time())
。请注意,您需要观察自己的接近程度,因为您将很快地溢出数据类型。
答案 2 :(得分:1)
怎么样:
QDateTime a = QDateTime::currentDateTime();
QDateTime b = a.addMSecs( 1000 );
qDebug( "%d", a.time().msecsTo( b.time() ) );
答案 3 :(得分:1)
所有解决方案都不错,但是如果您的时间戳采用特定格式,则可以在下面找到差异,也可以将其分配给QString。
让开始是某种格式的时刻
QString start = QDateTime().currentDateTime().toString("hh:mm:ss AP dd/MM/yyyy");
让 end 是开始后以某种格式出现的时间
QString end = QDateTime().currentDateTime().toString("hh:mm:ss AP dd/MM/yyyy");
因此,您可以通过提供格式并使用 msecsto 并将它们分配给QString(如果需要)来找到差异。
QString timeDiff= QString("%1").arg(QDateTime().fromString(start ,"hh:mm:ss AP dd/MM/yyyy").msecsTo(QDateTime().fromString(end ,"hh:mm:ss AP dd/MM/yyyy")));