2010-08-23 5 views
5

J'ai des dates dans un tas de formats. Maintenant je voudrais avoir une fonction (de quelque bibliothèque) en C++ qui peut analyser cette chaîne date/heure et me donner une structure comme un tm ou les convertir en une représentation déterministe pour que je puisse jouer avec la date/heure .Bibliothèque C++ (unix) pour analyser la chaîne de date/heure Y compris les fuseaux horaires

Certains formats que je vois sont les suivants: Mar 19 février 2008 20:47:53 0530 Mar 28 avril 2009 18:22:39 -0700 (PDT)

Je suis en mesure de faire ceux sans les fuseaux horaires mais pour ceux avec le fuseau horaire, j'ai fondamentalement besoin de la bibliothèque pour le convertir en UTC dans la structure tm.

J'ai essayé boost et strptime, mais pour autant que je sache, les deux ne supportent pas les fuseaux horaires sur les entrées. Y a-t-il quelque chose que j'ai manqué?

Toute aide sur celle-ci sera vraiment appréciée.

Cordialement

+0

en utilisant Essayé locale? http://www.cplusplus.com/reference/std/locale/ – DumbCoder

Répondre

2

Vous pouvez le faire avec coup de pouce, mais il est un peu particulier sur le format des fuseaux horaires dans la chaîne d'entrée. Il doit être en POSIX time zone format.

Par exemple:

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

Je voudrais ajouter une sorte de pré-traitement pour convertir vos temps formats de zone au format Posix, puis nourrir les cordes pour stimuler.

Questions connexes