【发布时间】:2012-04-17 15:27:32
【问题描述】:
使用 Qt 4.8 如何以 DD HH SS 格式打印时间?我有几秒钟的时间,我想取回该格式的字符串。
【问题讨论】:
标签: c++ qt4 intervals datetime-format duration
使用 Qt 4.8 如何以 DD HH SS 格式打印时间?我有几秒钟的时间,我想取回该格式的字符串。
【问题讨论】:
标签: c++ qt4 intervals datetime-format duration
QDateTime::fromTime_t(seconds).toString("ss hh DD");
见http://qt-project.org/doc/qt-5.0/qdatetime.html#toString
如果你想要一个持续时间(你的问题真的不清楚),试试类似的东西:
QString seconds_to_DHMS(quint32 duration)
{
QString res;
int seconds = (int) (duration % 60);
duration /= 60;
int minutes = (int) (duration % 60);
duration /= 60;
int hours = (int) (duration % 24);
int days = (int) (duration / 24);
if((hours == 0)&&(days == 0))
return res.sprintf("%02d:%02d", minutes, seconds);
if (days == 0)
return res.sprintf("%02d:%02d:%02d", hours, minutes, seconds);
return res.sprintf("%dd%02d:%02d:%02d", days, hours, minutes, seconds);
}
【讨论】:
toUTC() 而不是seconds_to_DHMS:QDateTime::fromTime_t(seconds).toUTC().toString("ss hh DD");
QDateTime::fromTime_t()在 Qt5 中已过时,不鼓励使用。 doc.qt.io/qt-5/qdatetime-obsolete.html
由于您的服务器正常运行时间为秒,您可以使用QDateTime 类。
QDateTime::fromTime_t(duration).toUTC().toString("dd hh ss");
注意toUTC,这是将开始时间设置为 0。由于您只会获取日期、小时和秒,因此如果秒不是自该日期以来的秒数并不重要,因为年份不会'不会显示。
【讨论】:
你可以使用QDateTime::fromTime_t:
返回一个日期时间,其日期和时间是自协调世界时 (Qt::UTC) 1970-01-01T00:00:00 以来经过的秒数。
【讨论】:
您要打印的是一段时间......而不是时钟时间的“时刻”。除了计算secsTo(和daysTo)之外,QDateTime 对持续时间的作用不大,而且您几乎必须自己打印。
好消息是数学并不难:
Convert seconds to Days, Minutes and Seconds
尽管您对 seconds / days / years 等词的国际化可能会令人讨厌。 :(
【讨论】:
数学非常难。天不是 24 小时,它们通常是 24 小时,但有时是 23 或 25(夏令时更改)或 24 小时和一两秒(闰秒)。同样的问题会持续数月(显然,因为不同大小的月份很常见)年(闰日),并且实际上任何通过以天(周)定义来继承天问题的东西。
【讨论】: