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

时间:2013-05-07 12:40:49

标签: c++ qt

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

我试过了:

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

但是小时的默认值总是01但我需要它为00.结果我应该得到00:00:10但是我得到01:00:10。

4 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

没有QTime::fromTime_t;可能你正在使用QDateTime::fromTime_t,它考虑了时区和夏令时。

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

答案 2 :(得分:0)

在Qt 5中,您可以使用QTime :: fromMSecsSinceStartOfDay(int msecs)。

ui->label->setText(QTime::fromMSecsSinceStartOfDay(10 * 1000).toString("hh:mm:ss"));

答案 3 :(得分:-1)

当秒数保持在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'));