【问题标题】:Parsing YAML !!timestamp (date time) with yaml-cpp使用 yaml-cpp 解析 YAML !!timestamp(日期时间)
【发布时间】: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

【问题讨论】:

    标签: c++ yaml yaml-cpp


    【解决方案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>())
    

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2020-10-14
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多