QTime 将秒数添加到新对象

Posted

技术标签:

【中文标题】QTime 将秒数添加到新对象【英文标题】:QTime add seconds to new object 【发布时间】:2016-06-13 06:19:52 【问题描述】:

我正在使用 QT5.51。为什么t1无效?:

QTime t1 = QTime().addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

我希望得到 "00:02:02" ,但我得到了错误的 ""。

【问题讨论】:

不得不提一下,我最近从qt4换成了qt5。我查看了“C++ API 更改”并发现“将天数添加到空 QDate 或秒数到空 QTime 将不再返回有效的 QDate/QTime。”也许这就是原因。 doc.qt.io/qt-5/sourcebreaks.html 【参考方案1】:

我想我明白了:

QTime t1(0,0,0,0);
t1 = t1.addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

= true "00:02:02"

【讨论】:

【参考方案2】:

新默认构造的QTime 对象以无效状态开始。

QTime::QTime()

构造一个空时间对象。空时间可以是QTime(0, 0, 0, 0)(即午夜)对象,除了isNull() 返回trueisValid() 返回false

将秒数添加到无效时间会使其无效 - 毕竟,这是一个无效的时间点,而不是您似乎期望的午夜。这几乎是一种 NaN 类型的行为。

QTime QTime::addSecs(int s) const

...

如果这个时间无效,则返回一个空时间。


要在有效状态下创建QTime,您可以使用其他构造函数

QTime::QTime(int h, int m, int s = 0, int ms = 0)

用小时 h、分钟 m、秒 s 和毫秒 ms 构造一个时间。

所以午夜初始化的QTime 将是QTime(0, 0);因此,OP 代码应该这样调整:

QTime t1 = QTime(0, 0).addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

您还可以使用其他几个helper static methods,这取决于您需要如何初始化它。

【讨论】:

于是我改成了QTime t1(0, 0, 0, 0); t1.addSecs(122)...它得到“真”但它没有添加任何东西,为什么?如果我将 t1.addSecs(122) 分配给一个新的无效 QTime 对象“t2”,它就可以工作。 因为addSeconds 不会添加到当前对象,而是返回一个带有添加秒数的新对象 此答案应包含有关如何创建有效 QTime 对象的信息。 @PhilippLudwig IDK 有多种方法,一旦您阅读了链接的文档,这些方法似乎都很明显;有一个构造函数需要几小时、几秒和几毫秒,还有一些静态方法可以解析字符串、获取当前时间和许多其他方法......这一切都在文档中。

以上是关于QTime 将秒数添加到新对象的主要内容,如果未能解决你的问题,请参考以下文章

PHP:将秒数添加到日期

PHP函数gmstrftime()将秒数转换成天时分秒

PHP 将秒数转换为小时,分钟,秒

从 .SRT 文件中增加或减少秒数

怎么将秒数转换为时间

将秒数转为HH:MM:SS格式的时间