2009-12-14 5 views
45

Wie könnte ich das aktuelle Datum mit Boost Bibliotheken im Format TT/MM/JJJJ H drucken?Wie formatiere Datum Zeit Objekt mit Format TT/MM/JJJJ?

Was ich habe:

boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); 
cout << boost::posix_time::to_simple_string(now).c_str(); 

2009-Dec-14 23:31:40 

Aber ich will:

14-Dezember-2009 23:31:40

Antwort

77

Wenn Sie Boost.Date_Time verwenden, das ist getan mit IO-Facetten.

Sie müssen boost/date_time/posix_time/posix_time_io.hpp enthalten die richtigen Facette typedefs zu erhalten (wtime_facet, time_facet, etc.) für boost::posix_time::ptime. Sobald dies erledigt ist, ist der Code ziemlich einfach. Sie durchtränken rufen die ostream Sie ausgeben wollen, dann nur Ausgang Ihre ptime:

#include <iostream> 
#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/date_time/posix_time/posix_time_io.hpp> 

using namespace boost::posix_time; 
using namespace std; 

int main(int argc, char **argv) { 
    time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S"); 
    cout.imbue(locale(cout.getloc(), facet)); 
    cout << second_clock::local_time() << endl; 
} 

Ausgang:

14-Dec-2009 16:13:14 

Siehe auch die list of format flags in den Boost-docs, falls Sie für die Ausgabe zu wollen Liebhaber.

+1

Und http://www.boost.org/doc/libs/1_35_0/doc/html/date_time/date_time_io.html#date_time.format_flags für die Formatflags. –

+0

Ich arbeitete für mich, danke! – Alfredo

+4

Wird cout Besitz übernehmen und den Facettenzeiger löschen? – Arthur