2010-08-23 10 views
5

Ho delle date in molti formati. Ora mi piacerebbe avere una funzione (da qualche libreria) in C++ che possa analizzare questa stringa data/ora e darmi una struttura come una tm o convertirli in qualche rappresentazione deterministica in modo da poter giocare con la data/ora .Libreria C++ (unix) per analizzare la stringa data/ora Comprende i fusi orari

Alcuni formati che vedo sono i seguenti: Tue, 19 Feb 2008 20:47:53 0530 Tue, 28 Apr 2009 18:22:39 -0700 (PDT)

sono in grado di fate quelli senza i fusi orari ma per quelli con il fuso orario, ho fondamentalmente bisogno della libreria per convertirla in UTC nella struttura tm.

Ho provato boost e strptime, ma per quanto ne so, entrambi non supportano i fusi orari sugli input. c'è qualcosa che mi è mancato?

QUALSIASI aiuto su questo sarà molto apprezzato.

saluti

+0

Provato using locali? http://www.cplusplus.com/reference/std/locale/ – DumbCoder

risposta

2

Si può fare con boost, ma è un po 'particolare circa il formato dei fusi orari nella stringa di input. Deve essere in POSIX time zone format.

Ad esempio:

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

vorrei aggiungere una sorta di pre-elaborazione per convertire i formati di fuso orario a Posix formato, quindi nutrire le corde per aumentare.