der*_*mai 4 c++ time date c++11 c++-chrono
我有以下代码,使用日期库:
#include "date.h"
#include <iostream>
#include <sstream>
using namespace date;
using namespace std::chrono;
int main()
{
auto now = system_clock::now();
std::stringstream ss;
ss << now;
std::string nowStr = ss.str(); // I need a string
std::cout << nowStr << " UTC\n";
}
Run Code Online (Sandbox Code Playgroud)
结果是:
2020-03-26 17:38:24.473372486 UTC
Run Code Online (Sandbox Code Playgroud)
stringstream 是从 now() 返回的 chrono::timepoint 获取字符串的正确方法吗?而且,如果是这样,我如何将这些纳秒四舍五入到毫秒?
是的,这ostringstream是一个很好的方法。您也可以使用date::formatwhich 返回 a string,但这仍然在ostringstream内部使用 a :
string s = format("%F %T %Z", now);
Run Code Online (Sandbox Code Playgroud)
使用任何一种技术,您都可以milliseconds通过在格式化之前截断输入time_point来截断输出milliseconds。您可以选择以下任何舍入模式:
time_point_cast<milliseconds>(now)floor<milliseconds>(now)ceil<milliseconds>(now)round<milliseconds>(now)——
string s = format("%F %T %Z", floor<milliseconds>(now));
2020-03-26 17:38:24.473 UTC
Run Code Online (Sandbox Code Playgroud)
在 C++20 中,这将变成:
string s = format("{:%F %T %Z}", floor<milliseconds>(now));
Run Code Online (Sandbox Code Playgroud)