C++ 如何将chrono::seconds转换为C++;?

C++ 如何将chrono::seconds转换为C++;?,c++,c++17,chrono,C++,C++17,Chrono,我有一个函数,它接受second作为参数,并返回HH:MM:SS格式的字符串。如果没有std::chrono,我可以这样实现它: string myclass::ElapsedTime(long secs) { uint32_t hh = secs / 3600; uint32_t mm = (secs % 3600) / 60; uint32_t ss = (secs % 3600) % 60; char timestring[9]; sprintf(timestring,

我有一个函数,它接受second作为参数,并返回HH:MM:SS格式的字符串。如果没有std::chrono,我可以这样实现它:

string myclass::ElapsedTime(long secs) {
  uint32_t hh = secs / 3600;
  uint32_t mm = (secs % 3600) / 60;
  uint32_t ss = (secs % 3600) % 60;
  char timestring[9];
  sprintf(timestring, "%02d:%02d:%02d", hh,mm,ss);
  return string(timestring);
}
使用
std::chrono
,我可以将参数转换为
std::chrono::seconds sec{seconds}

但是,如何将其转换为具有以下格式的字符串?
我在年看到了霍华德·希南的精彩视频教程。不幸的是,这种情况没有示例。

一旦C++20实现落地,您将能够执行以下操作(未经测试的代码):

std::chrono::hh_mm_ss tod{std::chrono::secs};
std::cout使用它看起来像:

#include "date/date.h"
#include <string>

std::string
ElapsedTime(std::chrono::seconds secs)
{
    return date::format("%T", secs);
}
#include "date/date.h"
#include <string>

std::string
ElapsedTime(std::chrono::seconds secs)
{
    return date::format("%T", secs);
}
#include <chrono>
#include <string>

std::string
ElapsedTime(std::chrono::seconds secs)
{
    using namespace std;
    using namespace std::chrono;
    bool neg = secs < 0s;
    if (neg)
        secs = -secs;
    auto h = duration_cast<hours>(secs);
    secs -= h;
    auto m = duration_cast<minutes>(secs);
    secs -= m;
    std::string result;
    if (neg)
        result.push_back('-');
    if (h < 10h)
        result.push_back('0');
    result += to_string(h/1h);
    result += ':';
    if (m < 10min)
        result.push_back('0');
    result += to_string(m/1min);
    result += ':';
    if (secs < 10s)
        result.push_back('0');
    result += to_string(secs/1s);
    return result;
}
std::string
ElapsedTime(std::chrono::seconds secs)
{
    return std::format("{:%T}", secs);
}