Sim*_*eUk 3 c++ time date c++-chrono
我正在使用HowardHinnant date.h格式化文件名,该文件名必须包含精度为HH-MM-SS-ms的毫秒级时间
即
10-23-44-564
目前,我必须将time_point转换为毫秒精度,并使用%S标志,例如
"%H-%M-%S"
Run Code Online (Sandbox Code Playgroud)
小数点“。” 然后必须将其更改为连字符。
这一切似乎都比较笨拙,使我相信我对此考虑得过多。
有人可以让我挺直吗?
没有一个很好的方法可以做到这一点。但是,可以创建一个facet提供-作为小数点字符的字符,并在format调用中使用该字符,如下所示:
#include "date/date.h"
#include <iostream>
#include <locale>
class punct_facet: public std::numpunct<char>
{
protected:
char do_decimal_point() const override { return '-'; }
};
int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
cout << format(locale{locale{}, new punct_facet},
"%H-%M-%S", 15h + 34min + 9s + 123ms) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
15-34-09-123
Run Code Online (Sandbox Code Playgroud)
这是另一种工作方式:
#include "date/date.h"
#include <iostream>
#include <iomanip>
int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
auto d = 15h + 34min + 9s + 23ms;
auto s = floor<seconds>(d);
cout << format("%H-%M-%S-", s) << setfill('0') << setw(3) << (d-s).count() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
15-34-09-023
Run Code Online (Sandbox Code Playgroud)