2013-05-09 539 views
2

我使用yaml-cpp驚人的庫來解析YAML文件,我需要解析!時間戳類型的標量。例如:解析YAML !!時間戳(日期時間)YAML-CPP

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

1 - 我怎麼能這樣做呢?我應該將它解析爲std :: string並處理自己的日期時間解析嗎?我是否需要導入一些boost庫,以便數據類型轉換非常簡單?

2 - 而在一般情況下,什麼都YAML basic data types由庫支持?

回答

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格式並不完全是其他圖書館期望的。

一般而言,YAML-CPP不支持任何自動類型檢測。

+0

謝謝你的回答,傑西。這就是我正在做的,但是由於yaml-cpp使用boost庫,我只是想確認使用可能提升日期時間庫的方法沒有很酷的方法。再次感謝偉大的圖書館,我喜歡這個新的API。 – eguaio 2013-05-10 13:18:02

1

我知道這是有點晚了,但我遇到同樣的事情來了。對我來說,最快捷,最簡單的辦法是使在YAML文件字符串的日期和使用boost從字符串轉換爲POSIX時間類型:

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