如何以毫秒为单位获得两个 QDateTimes 之间的差异?
Posted
技术标签:
【中文标题】如何以毫秒为单位获得两个 QDateTimes 之间的差异?【英文标题】:How to get the difference between two QDateTimes in milliseconds? 【发布时间】:2010-09-13 20:23:48 【问题描述】:我希望 QDateTime 覆盖 - 运算符并返回一个 QTimeSpan 表示两个 QDateTime 之间的差异(就像 .NET 的 TimeSpan 一样)。由于这在 Qt 中不存在,所以我决定实现它。
不幸的是,QDateTime 没有类似msecsTo
的功能。将两个 QDateTimes 之间的差异精确到毫秒的最简洁方法是什么?
【问题讨论】:
【参考方案1】:我意识到这个问题是从 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
【讨论】:
我会在您的答案中包含提供的链接中的详细信息,否则这可能会作为仅链接答案而关闭 谢谢,博士。我在答案中添加了一个代码示例。 *** - 社区需要有一种方法来更新接受的答案,因为随着时间的推移,答案可能会由于更新版本的软件、新方法等而改变。这应该是目前公认的答案,直到QT 在未来会有所改变。我对这个投了赞成票。【参考方案2】:我可能会使用a.daysTo(b)*1000*60*60*24 + a.time().msecsTo(b.time())
。请注意,您需要注意您的距离有多近,因为您将很快溢出您的数据类型。
【讨论】:
【参考方案3】:这个怎么样:
QDateTime a = QDateTime::currentDateTime();
QDateTime b = a.addMSecs( 1000 );
qDebug( "%d", a.time().msecsTo( b.time() ) );
Source
【讨论】:
但这会完全忽略日期部分。【参考方案4】:所有解决方案都很好,但如果您的时间戳是特定格式,那么您可以通过下面找到差异,您也可以将其分配给 QString。
让开始是以某种格式表示某个时刻的时间
QString start = QDateTime().currentDateTime().toString("hh:mm:ss AP dd/MM/yyyy");
let end 以某种格式表示 start 之后的某个时刻
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")));
【讨论】:
以上是关于如何以毫秒为单位获得两个 QDateTimes 之间的差异?的主要内容,如果未能解决你的问题,请参考以下文章