Wie kann ich das aktuelle Datum mit Boost - Bibliotheken im Format TT/MM/JJJJ H drucken?
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 möchte:
14-Dec-2009 23:31:40
Wenn Sie Boost.Date_Time verwenden, geschieht dies mit IO -Facetten.
Sie müssen boost/date_time/posix_time/posix_time_io.hpp
einschließen, um die korrekten Facettentyp-Daten (wtime_facet
, time_facet
usw.) für boost::posix_time::ptime
zu erhalten. Sobald dies erledigt ist, ist der Code ziemlich einfach. Sie rufen imbue die ostream
auf, an die Sie ausgeben möchten, und geben dann einfach Ihre ptime
aus:
#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;
}
Ausgabe:
14-Dec-2009 16:13:14
Siehe auch die Liste der Formatflags in den Boost-Dokumenten, falls Sie etwas Schickeres ausgeben möchten.
Mit der Bibliothek {fmt} können Sie das Datum im erforderlichen Format wie folgt drucken:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <fmt/time.h>
int main() {
auto now = boost::posix_time::second_clock::local_time();
fmt::print("{:%d-%b-%Y %H:%M:%S}\n", to_tm(now));
}
Diese Formatierungsmöglichkeit wird zur Standardisierung in C++ 20 vorgeschlagen: P0645 .
Alternativ können Sie std::put_time
verwenden, das in C++ 11 eingeführt wurde:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iomanip>
#include <iostream>
int main() {
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
auto tm = to_tm(now);
std::cout << std::put_time(&tm, "%d-%b-%Y %H:%M:%S");
}
Disclaimer: Ich bin der Autor von {fmt}.