2

我正在使用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 基本数据类型?

4

2 回答 2

2

您必须自己解析日期时间。如果你有一些结构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 不支持任何自动类型检测。

于 2013-05-09T21:30:43.673 回答
1

我知道这有点晚了,但我遇到了同样的事情。对我来说最快、最简单的解决方案是在 YAML 文档字符串中创建日期并使用 boost 将字符串转换为 posix 时间类型:

boost::posix_time::from_iso_string(node[0]["timeSpec"]["startTime"].as<std::string>())
于 2013-07-26T22:05:01.570 回答