2010-08-23 12 views
5

Tengo fechas en varios formatos. Ahora me gustaría tener una función (de alguna biblioteca) en C++ que pueda analizar estas cadenas de fecha/hora y darme alguna estructura como una tm o convertirlas a alguna representación determinística para que pueda jugar con la fecha/hora .Biblioteca C++ (unix) para analizar cadena de fecha/hora Incluyendo zonas horarias

Algunos formatos que veo son los siguientes: Mar 19 Feb 2008 20:47:53 0530 mar 28 Abr 2009 18:22:39 -0700 (PDT)

estoy en condiciones de hacer las que no tienen las zonas horarias, pero para las que tienen la zona horaria, básicamente necesito que la biblioteca las convierta a UTC en la estructura tm.

He intentado impulsar y strptime, pero hasta donde yo sé, ambos no admiten zonas horarias en las entradas. ¿hay algo que me haya perdido?

CUALQUIER ayuda será realmente apreciada.

Saludos

+0

intentado usar local? http://www.cplusplus.com/reference/std/locale/ – DumbCoder

Respuesta

2

Usted puede hacer eso con impulso, pero es un poco particular, sobre el formato de las zonas horarias en la cadena de entrada. Tiene que estar en POSIX time zone format.

Por ejemplo:

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

me gustaría añadir algún tipo de pre-procesamiento para convertir sus formatos de zona horaria a POSIX formato, y luego alimentar a las cuerdas para aumentar.

Cuestiones relacionadas