2010-08-23 7 views
5

Ich habe Daten in einer Reihe von Formaten. Nun hätte ich gerne eine Funktion (aus einer Bibliothek) in C++, die diese Datum/Zeit-Zeichenfolge parsen kann und mir eine Struktur wie eine tm gibt oder sie in eine deterministische Darstellung umwandelt, so dass ich mit dem Datum/der Zeit herumspielen kann .C++ - Bibliothek (Unix), um Datum/Uhrzeit zu analysieren String einschließlich Zeitzonen

Einige Formate, die ich sehe, sind wie folgt: Di, 19. Februar 2008 20.47.53 0530 Di, 28. April 2009 18.22.39 -0700 (PDT)

Ich bin in der Lage zu mach die ohne Zeitzonen, aber für diejenigen mit der Zeitzone, ich brauche die Bibliothek im Grunde um sie in UTC in der tm Struktur zu konvertieren.

Ich habe versucht, Boost und Strptime, aber soweit ich weiß, unterstützen beide keine Zeitzonen auf Eingaben. Gibt es etwas, das ich vermisst habe?

Eine Hilfe zu diesem wird sehr geschätzt werden.

Grüße

+0

versucht, mit locale? http://www.cplusplus.com/reference/std/locale/ – DumbCoder

Antwort

2

Sie können mit Boost tun, aber es über das Format der Zeitzonen in der Eingabezeichenfolge ein wenig besonders ist. Es muss in POSIX time zone format sein.

Zum Beispiel:

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

ich eine Art Vorverarbeitung hinzufügen würde Ihre Zeitzone Formate in POSIX-Format zu konvertieren und dann die Saiten zu füttern zu steigern.

Verwandte Themen