使用 yaml-cpp 解析 YAML !!timestamp(日期时间)
Posted
技术标签:
【中文标题】使用 yaml-cpp 解析 YAML !!timestamp(日期时间)【英文标题】:Parsing YAML !!timestamp (date time) with yaml-cpp 【发布时间】:2013-05-09 21:07:59 【问题描述】:我正在使用 yaml-cpp 惊人的库来解析 YAML 文件,我需要解析一个 !!timestamp 类型的标量。例如:
- timeSpec:
startTime: 2013-05-15T02:59:43.138Z
endTime: 2013-05-23T02:59:43.138Z
1 - 我该怎么做?我应该将其解析为 std::string 并自己处理日期时间的解析吗?我是否需要导入一些 boost 库以便数据类型转换简单?
2 - 一般来说,库支持哪些YAML basic data types?
【问题讨论】:
【参考方案1】:您必须自己解析日期时间。如果你有一些结构DateTime
,作为骨架,你可以这样写:
namespace YAML
template<>
struct convert<DateTime>
static Node encode(const DateTime& rhs)
std::string str = YourCodeToConvertToAString(rhs);
return Node(str);
static bool decode(const Node& node, DateTime& rhs)
if(!node.IsScalar())
return false;
std::string str = node.as<std::string>();
// Fill in the DateTime struct.
return true;
;
如果你能找到一个库(也许是 boost)来做到这一点,那会更容易,但日期时间的 YAML 格式可能不是其他库所期望的。
一般来说,yaml-cpp 不支持任何自动类型检测。
【讨论】:
谢谢你的回答,杰西。这就是我正在做的事情,但由于 yaml-cpp 使用 boost 库,我只是想确认使用 boost Date Time 库没有很酷的方法。再次感谢您提供的出色库,我喜欢新的 api。【参考方案2】:我知道这有点晚了,但我遇到了同样的事情。对我来说最快、最简单的解决方案是在 YAML 文档字符串中制作日期并使用 boost 将字符串转换为 posix 时间类型:
boost::posix_time::from_iso_string(node[0]["timeSpec"]["startTime"].as<std::string>())
【讨论】:
以上是关于使用 yaml-cpp 解析 YAML !!timestamp(日期时间)的主要内容,如果未能解决你的问题,请参考以下文章