Анализ YAML !! timestamp (дата и время) с помощью yaml-cpp

я использую YAML-каст потрясающая библиотека для разбора файлов YAML и мне нужно разобрать скаляр типа !! timestamp. Например:

- timeSpec:
startTime: 2013-05-15T02:59:43.138Z
endTime: 2013-05-23T02:59:43.138Z

1 — Как я мог это сделать? Должен ли я анализировать его как std :: string и сам обрабатывать разбор даты? Нужно ли импортировать некоторую библиотеку наддува, чтобы преобразование типов данных было простым?

2 — И вообще, что Основные типы данных YAML поддерживаются библиотекой?

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;
}
};
}

Если вы можете найти для этого библиотеку (возможно, поддержку), это было бы проще, но возможно, что формат YAML для datetime не совсем то, что ожидает какая-то другая библиотека.

В общем, yaml-cpp не поддерживает автоматическое определение типов.

2

Другие решения

Я знаю, что уже немного поздно, но я столкнулся с тем же. Самым быстрым и простым решением для меня было сделать даты в строках документов YAML и использовать boost для преобразования из строки в тип времени posix:

boost::posix_time::from_iso_string(node[0]["timeSpec"]["startTime"].as<std::string>())
1

По вопросам рекламы [email protected]