Подтвердить что ты не робот

Qt С++ Преобразование секунд в форматированную строку (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.

4b9b3361

Ответ 1

Ваш часовой пояс включен в это, поэтому. Попробуйте следующее:

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

Ответ 2

Нет QTime::fromTime_t; возможно, вы используете QDateTime::fromTime_t, который учитывает часовые пояса и летнее время.

Вместо этого вы можете использовать QTime().addSecs(10).toString(...).

Ответ 3

В Qt 5 вы можете использовать QTime :: fromMSecsSinceStartOfDay (int msecs).

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

Ответ 4

Другие ответы прекрасно работают, когда количество секунд остается ниже 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'));