Подскажите аналог метода из Python rjust() для C++
Подскажите аналог метода из Python rjust() для C++.
Мне нужно преобразовать время в секундах в формат hh:mm:ss.
В Python для этого я использовал метод rjust(), предварительно преобразовав секунды в часы, минуты, секунды:
t = hrs.rjust(2, "0") + ":" + min.rjust(2, "0") + ":" + sec.rjust(2, "0")
здесь метод rjust дополнял нулями слева недостающие позиции.
Возможно в С++ есть метод, который непосредственно это выполнит, без дополнительных преобразований.
Попробовал в таком виде, но секунды представлены только одним разрядом (т.е. вместо "00:00:02" пишет "00:00:2")
QString hrs = QString::number(h);
QString min = QString::number(m);
QString sec = QString::number(s);
std::ostringstream sstr;
sstr << hrs.toStdString() << std::setw(2) << std::setfill('0') << ":" << min.toStdString() << std::setw(2) << std::setfill('0') << ":" << sec.toStdString() << std::setw(2) << std::setfill('0');
std::string tm = sstr.str();
ui_progress->label_remaining->setText(QString::fromStdString(tm));
Ответы (4 шт):
Автор решения: bipll
→ Ссылка
#include <sstream>
#include <iomanip>
template<class T> std::string rjust(int n, T &&t) {
return static_cast<std::ostringstream const &>(
std::ostringstream() << std::setw(n) << std::setfill('0') << t).str();
}
Автор решения: Helg1980
→ Ссылка
Спасибо! Получилось так:
std::ostringstream sstr;
sstr << std::setw(2) << std::setfill('0') << hrs.toStdString() << ":" << std::setw(2) << std::setfill('0') << min.toStdString() << ":" << std::setw(2) << std::setfill('0') << sec.toStdString();
std::string tm = sstr.str();
ui_progress->label_remaining->setText(QString::fromStdString(tm));
Автор решения: mrHalfer
→ Ссылка
QString hrs = QString::number(h).rightJustified(2, '0');
QString min = QString::number(m).rightJustified(2, '0');
QString sec = QString::number(s).rightJustified(2, '0');
Автор решения: HolyBlackCat
→ Ссылка
В прекрасном новом мире делают так: std::format("{:02d}:{:02d}:{:02d}", 1, 2, 3) -> 01:02:03.