正如我在标题中所说,我需要将秒转换为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'));