gpt4 book ai didi

c++ - 为什么在 HowardHinnant 的 date.h 库中没有用于 to_stream 和 from_stream 格式的毫秒标志

转载 作者:太空狗 更新时间:2023-10-29 20:33:03 25 4
gpt4 key购买 nike

我正在使用 HowardHinnant date.h 来格式化文件名,该文件名必须包括精确到毫秒的时间,格式为 HH-MM-SS-ms

10-23-44-564

目前要做到这一点,我必须将 time_point 转换为毫秒精度并使用 %S 标志,例如

 "%H-%M-%S"

小数点'.'然后必须更改为连字符。

这一切看起来都很笨拙,让我相信我想多了。

谁能帮我弄清楚?

最佳答案

没有很好的方法来做到这一点。然而,可以创建一个 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';
}

输出:

15-34-09-123

这是另一种工作方式:

#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';
}

输出:

15-34-09-023

关于c++ - 为什么在 HowardHinnant 的 date.h 库中没有用于 to_stream 和 from_stream 格式的毫秒标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57716119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com