47 votes

Comment formater un objet date-heure au format dd/mm/yyyy ?

Comment pourrais-je imprimer la date du jour, en utilisant Boost les bibliothèques, 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-Dec-2009 23:31:40

81voto

tgamblin Points 25755

Si vous utilisez Boost.Date_Time Cette opération est réalisée à l'aide des facettes IO.

Vous devez inclure boost/date_time/posix_time/posix_time_io.hpp pour obtenir les typologies de facettes correctes ( wtime_facet , time_facet etc.) pour boost::posix_time::ptime . Une fois que c'est fait, le code est assez simple. Vous appelez imbue sur l'objet ostream vers lequel vous voulez sortir, alors sortez 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 la documentation de boost, au cas où vous voudriez produire quelque chose de plus sophistiqué.

1 votes

Et boost.org/doc/libs/1_35_0/doc/html/date_time/ pour les drapeaux de format.

4 votes

@Jules cout va s'en charger. Voir rhubbarb.wordpress.com/2009/10/17/

3 votes

La locale prend la propriété. Donc, si vous gardez cette locale stockée, vous pouvez l'utiliser pour n'importe quel flux de sortie, pas seulement pour cout.

1voto

vitaut Points 10255

Avec le Bibliothèque {fmt} vous pouvez imprimer la date dans le 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 facilité de formatage est proposée pour la normalisation dans C++20 : P0645 .

Vous pouvez également utiliser std::put_time qui a été introduit dans 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");
}

Avis de non-responsabilité : Je suis l'auteur de {fmt}.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X