Qt C ++将秒转换为格式化字符串(hh:mm:ss)

问题描述 投票:13回答:4

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

我试过这个:

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

但是小时的默认值总是01但我需要它为00.结果我应该得到00:00:10但是我得到01:00:10。

c++ qt
4个回答
14
投票

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

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

3
投票

没有QTime::fromTime_t;可能你正在使用QDateTime::fromTime_t,它占据了时区和夏令时。

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


0
投票

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

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

-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'));
© www.soinside.com 2019 - 2024. All rights reserved.