Ответ 1
Ваш часовой пояс включен в это, поэтому. Попробуйте следующее:
QDateTime::fromTime_t(10).toUTC().toString("hh:mm:ss");
Как я сказал в заголовке, мне нужно преобразовать секунды в 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 часов и более. Число 2 в методе arg заставляет строку быть 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'));