C++ Qt C++;将秒转换为格式化字符串(hh:mm:ss)

C++ Qt C++;将秒转换为格式化字符串(hh:mm:ss),c++,qt,C++,Qt,正如我在标题中所说,我需要将秒转换为hh:mm:ss 我试过这个: ui->label->setText(QDateTime::fromTime_t(10).toString("hh:mm:ss")); 但小时的默认值始终为01,但我需要它为00。因此,我应该得到00:00:10,但我得到01:00:10。没有QTime::fromTime\t;可能您使用的是QDateTime::fromTime\t,它考虑了时区和夏令时 相反,您可以使用QTime().addSecs(10).

正如我在标题中所说,我需要将秒转换为hh:mm:ss

我试过这个:

 ui->label->setText(QDateTime::fromTime_t(10).toString("hh:mm:ss"));

但小时的默认值始终为01,但我需要它为00。因此,我应该得到00:00:10,但我得到01:00:10。

没有
QTime::fromTime\t
;可能您使用的是
QDateTime::fromTime\t
,它考虑了时区和夏令时


相反,您可以使用
QTime().addSecs(10).toString(…)

您的时区包含在其中,这就是原因。试试这个:

QDateTime::fromTime_t(10).toUTC().toString("hh:mm:ss");

在Qt5中,您可以使用QTime::fromMSecsSinceStartOfDay(int-msecs)


当秒数保持在24小时以下时,其他答案就完美了。对于大多数用例来说,这已经足够好了。然而,对于我们的用例,计时器超过24小时并重置为00:00:00。请注意,以下代码在100小时或更长时间内不起作用。arg方法中的数字2强制字符串为2个字符

int totalNumberOfSeconds = 90242; // nr of seconds more than 1 day.
int seconds = totalNumberOfSeconds % 60;
int minutes = (totalNumberOfSeconds / 60) % 60;
int hours = (totalNumberOfSeconds / 60 / 60);

QString timeString = QString("%1:%2:%3")
  .arg(hours, 2, 10, QChar('0'))
  .arg(minutes, 2, 10, QChar('0'))
  .arg(seconds, 2, 10, QChar('0'));

是的,我使用的是QDateTime::fromTime,因为它是打字错误,所以如果你想使用
QTime
,你需要使用
QTime(0,0,0,0)。addSecs(10)。toString(…)
。否则,
QTime
将初始化为NULL,并且不会打印任何内容。我发现这个答案是最好的。谢谢。在Qt5中,请使用来自secssinceepoch的
而不是来自time的
。对于超过24小时的持续时间,您可以调整格式化程序:
QDateTime::fromscesnceepoch(10,Qt::UTC).toString(“d hh:mm:ss”)。但由于它是一个日期时间,而不是一个持续时间,所以使用月份无法按预期工作。也就是说,它仅适用于31天以下的持续时间。一般来说,这不适用于持续时间,因为它试图解释闰秒,从而“伪造”持续时间。注意:根据QTime的设计,这仅限于<24小时的持续时间。
int totalNumberOfSeconds = 90242; // nr of seconds more than 1 day.
int seconds = totalNumberOfSeconds % 60;
int minutes = (totalNumberOfSeconds / 60) % 60;
int hours = (totalNumberOfSeconds / 60 / 60);

QString timeString = QString("%1:%2:%3")
  .arg(hours, 2, 10, QChar('0'))
  .arg(minutes, 2, 10, QChar('0'))
  .arg(seconds, 2, 10, QChar('0'));