繁体   English   中英

使用Howard Hinnant日期库解析次秒日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM