2013-05-30 34 views
3

我正在使用我的新應用程序遷移我的舊應用程序數據庫。舊的應用程序使用QT,新的應用程序沒有。如何從使用QDateTime ISODate格式創建的字符串創建boost :: posix_time :: ptime對象?

我想將已存儲在數據庫中的日期轉換爲boost :: posix_time :: ptime對象。日期通過將ISDate格式的QDateTime對象轉換爲字符串而存儲在數據庫中。

因此,源字符串具有以下格式:

YYYY-MM-DDTHH:MM:SSSZ 

有來自QDateTime字符串的簡單程序可用來產生ptimes?我已經嘗試過posix_time :: from_iso_string,但是由於在日期中存在' - '分隔符(可能':'分隔符也是一個問題),因此失敗。

+0

您可能只需編寫自己的解析器。這些字符串是否都以這種方式嚴格格式化?在這種情況下,如果你可以忍受它,你可以使用像sscanf這樣的東西,或者從頭開始編寫一個簡單的解析器。或使用boost正則表達式。提升精神可能是矯枉過正,會導致編譯時間痛苦,但在其他方面很好。 – Pete

+0

或者只是去掉不需要的字符串並使用from_iso_string。 – Pete

+0

你是怎麼得到ISO日期的?我可以在'QDateTime'上找到'toString'方法。 –

回答

3

沒有時區(Z格式標誌),這很容易。請參閱以下代碼。

#include <iostream> 
#include <boost/date_time.hpp> 

int main(int argc, char *argv[]) { 
    const boost::posix_time::ptime time_with_ms = boost::date_time::parse_delimited_time<boost::posix_time::ptime>("2013-05-31T09:00:00.123", 'T'); 
    const boost::posix_time::ptime time_without_ms = boost::date_time::parse_delimited_time<boost::posix_time::ptime>("2013-05-31T09:00:00", 'T'); 
    std::cout << boost::posix_time::to_simple_string(time_with_ms) << std::endl; 
    std::cout << boost::posix_time::to_simple_string(time_without_ms) << std::endl; 
    return 0; 
} 
+1

lolm你一定是在開玩笑這些數據類型長度。 :d –

相關問題