2010-08-23 53 views
5

我有一堆格式的日期。 現在我想在C++中有一個函數(來自某個庫),它可以解析這些日期/時間字符串,併爲我提供一些結構,如tm或將它們轉換爲某種確定性表示形式,以便我可以使用日期/時間。是解析日期/時間字符串的C++庫(unix)包括時區

一些格式,我看到如下: 星期二,2008年2月19日20點47分53秒0530 星期二,2009年4月28日18點22分39秒-0700(PDT)

我能做沒有時區的人,但對於時區的人,我基本上需要庫在tm結構中將其轉換爲UTC。

我已經嘗試了提升和strptime,但據我所知,兩個都沒有輸入支持時區。有什麼我錯過了嗎?

任何幫助這一個將非常感激。

問候

+0

使用的語言環境試過嗎? http://www.cplusplus.com/reference/std/locale/ – DumbCoder 2010-08-23 12:35:03

回答

2

你可以做到這一點與提升,但它是一個有點講究的時區輸入字符串格式。它必須在POSIX time zone format

例如:

#include <iostream> 
#include <boost/date_time/local_time/local_time.hpp> 
#include <boost/date_time/time_facet.hpp> 
int main() 
{ 
     std::string msg = "28 Apr 2009 18:22:39 PST-8PDT,M4.1.0,M10.1.0"; // or just "PDT-7" but that will be a new, fake time zone called 'PDT' 

     std::istringstream ss(msg); 
     ss.imbue(std::locale(ss.getloc(), 
       new boost::local_time::local_time_input_facet("%d %b %Y %H:%M:%S%F %ZP"))); 
     boost::local_time::local_date_time t(boost::date_time::pos_infin); 
     ss >> t; 
     std::cout << t << '\n'; 
     // and now you can call t.to_tm() to get your tm structure 
} 

我想補充某種預先處理的轉換時區格式POSIX的格式,然後喂字符串提振。