web-dev-qa-db-fra.com

Comment formater un objet date/heure au format jj/mm/aaaa?

Comment puis-je imprimer la date du jour avec Boost libraries, au format jj/mm/aaaa H?

Ce que j'ai:

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

Mais je veux:

14 décembre 2009 23:31:40

46
Alfredo

Si vous utilisez Boost.Date_Time , utilisez les facettes IO. 

Vous devez inclure boost/date_time/posix_time/posix_time_io.hpp pour obtenir les types de facettes corrects (wtime_facet, time_facet, etc.) pour boost::posix_time::ptime. Une fois que cela est fait, le code est assez simple. Vous appelez imbue sur la ostream à laquelle vous voulez envoyer les résultats, puis indiquez simplement votre 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;
}

Sortie:

14-Dec-2009 16:13:14

Voir aussi le liste des drapeaux de format } dans les documents de renforcement, au cas où vous souhaiteriez produire quelque chose de plus sophistiqué.

78
Todd Gamblin

Avec la bibliothèque {fmt} , vous pouvez imprimer la date au format requis comme suit:

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

Cette fonctionnalité de formatage est proposée pour normalisation en C++ 20: P0645 .

Sinon, vous pouvez utiliser std::put_time qui a été introduit en C++ 11:

#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: je suis l'auteur de {fmt}.

0
vitaut