[英]Parsing Subsecond Date with Howard Hinnant Date Library
我有一个类似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
。 我看过这里的文档,它指出%s
代表第二次的分数。 date的示例值是20170110 103648340
。 但是,当我输出ts
我得到0。如果您想知道为什么将其转换为纳秒,因为我需要以纳秒为单位的日期进行其他操作。
使用%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));
}
您也可以这样解析:
sys_seconds tp;
int ims;
ss >> parse("%Y%m%d %H%M%2S", tp) >> ims;
return tp + milliseconds{ims};
%2S
说:在几秒钟内最多解析2个字符。 剩下的三位数尚未解析。 用整数解析器选择它们,然后将该整数转换为毫秒,这样就很好。
如果3毫秒数字后有尾随数字,则此功能将无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.