我有一个像YYYYMMDD HHMMSSFFF
这样的日期字符串。我正在尝试使用Howard Hinnats日期库。代码片段就是这样,
std::chrono::system_clock::time_point tp;
char date[20] = {0};
std::istringstream ss{date};
ss >> date::parse("%Y%m%d %H%M%S%s", tp);
long ts = (std::chrono::time_point_cast<std::chrono::nanoseconds>(tp)
.time_since_epoch() /
std::chrono::nanoseconds(1));
但是此代码无法读取亚秒FFF
。我看了文档here,并指出%s
代表第二次分数。日期的示例值为20170110 103648340
。但是,当我输出ts
时,我得到0。如果您想知道为什么将其转换为纳秒,因为我需要以纳秒为单位的日期进行其他操作。
答案 0 :(得分:1)
使用%T似乎有效。这是一个示例:
#include <date/date.h>
int main()
{
std::string dt{ "20190501 113001234" };
dt = dt.insert(11, ":");
dt = dt.insert(14, ":");
dt = dt.insert(17, ".");
// now we have "20190501 11:30:01.234"
std::chrono::system_clock::time_point tp;
std::istringstream ss{ dt };
ss >> date::parse("%Y%m%d %T", tp);
long ts = (std::chrono::time_point_cast<std::chrono::nanoseconds>(tp)
.time_since_epoch() /
std::chrono::nanoseconds(1));
}
答案 1 :(得分:0)
您也可以这样解析:
sys_seconds tp;
int ims;
ss >> parse("%Y%m%d %H%M%2S", tp) >> ims;
return tp + milliseconds{ims};
%2S
说:每秒解析多达2个字符。剩下的三位数尚未解析。用整数解析器进行选择,然后将该整数转换为毫秒,就可以了。
如果3毫秒数字后有尾随数字,则此功能将无效。