正如我在标题中所说,我需要将秒转换为 hh:mm:ss
我试过这个:
ui->label->setText(QDateTime::fromTime_t(10).toString("hh:mm:ss"));
但是小时的默认值始终是 01,但我需要它是 00。结果我应该得到 00:00:10 但我得到 01:00:10。
您的时区包含在其中,这就是原因。尝试这个:
QDateTime::fromTime_t(10).toUTC().toString("hh:mm:ss");
没有QTime::fromTime_t
; 可能您正在使用QDateTime::fromTime_t
,它考虑了时区和夏令时。
相反,您可以使用QTime().addSecs(10).toString(...)
.
在 Qt 5 中,您可以使用 QTime::fromMSecsSinceStartOfDay(int msecs)。
ui->label->setText(QTime::fromMSecsSinceStartOfDay(10 * 1000).toString("hh:mm:ss"));
当秒数保持在 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'));