17

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

我试过这个:

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

但是小时的默认值始终是 01,但我需要它是 00。结果我应该得到 00:00:10 但我得到 01:00:10。

4

4 回答 4

17

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

QDateTime::fromTime_t(10).toUTC().toString("hh:mm:ss");
于 2013-05-07T12:50:49.563 回答
4

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

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

于 2013-05-07T12:49:58.220 回答
2

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

ui->label->setText(QTime::fromMSecsSinceStartOfDay(10 * 1000).toString("hh:mm:ss"));
于 2018-10-30T14:17:37.120 回答
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'));
于 2019-04-19T11:32:42.257 回答