tags:

views:

1123

answers:

2

How could I print the current date, using Boost libraries, in the format dd/mm/yyyy H?

What I have:

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

But I want:

14-Dec-2009 23:31:40

+15  A: 

If you're using Boost.Date_Time, this is done using IO facets.

You need to include boost/date_time/posix_time/posix_time_io.hpp to get the correct facet typedefs (wtime_facet, time_facet, etc.) for boost::posix_time::ptime. Once this is done, the code is pretty simple. You call imbue on the ostream you want to output to, then just output your 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;
}

Output:

14-Dec-2009 16:13:14

See also the list of format flags in the boost docs, in case you want to output something fancier.

tgamblin
And http://www.boost.org/doc/libs/1_35_0/doc/html/date_time/date_time_io.html#date_time.format_flags for the format flags.
Bertrand Marron
I worked for me, thanks!
Alfredo
jules
A: 

Is it necessary to delete "facet"?

garrad