如何以毫秒为单位获得两个 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 之间的差异?的主要内容,如果未能解决你的问题,请参考以下文章

在不安装额外软件包的情况下获得以毫秒为单位的时间?

以毫秒为单位的日期时间选择器

两个日期时间之间的差异(以毫秒为单位)(Informix)

c++代码执行定时器返回0,需要以毫秒为单位输出

如何从日期对象python获取以毫秒(秒后3位小数)为单位的时间值?

是否可以在Swi-Prolog中获得以毫秒为单位的经过时间?