webentwicklung-frage-antwort-db.com.de

Wie formatiere ich das Datumszeitobjekt mit dem Format TT/MM/JJJJ?

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

46
Alfredo

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.

78
Todd Gamblin

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

0
vitaut