я использую YAML-каст потрясающая библиотека для разбора файлов YAML и мне нужно разобрать скаляр типа !! timestamp. Например:
- timeSpec:
startTime: 2013-05-15T02:59:43.138Z
endTime: 2013-05-23T02:59:43.138Z
1 — Как я мог это сделать? Должен ли я анализировать его как std :: string и сам обрабатывать разбор даты? Нужно ли импортировать некоторую библиотеку наддува, чтобы преобразование типов данных было простым?
2 — И вообще, что Основные типы данных YAML поддерживаются библиотекой?
Вы должны будете разобрать дату самостоятельно. Если у вас есть какая-то структура 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 не поддерживает автоматическое определение типов.
Я знаю, что уже немного поздно, но я столкнулся с тем же. Самым быстрым и простым решением для меня было сделать даты в строках документов YAML и использовать boost для преобразования из строки в тип времени posix:
boost::posix_time::from_iso_string(node[0]["timeSpec"]["startTime"].as<std::string>())