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