2011-10-26 7 views
5

¿Alguien sabe cómo obtener un formato de fecha simple de impulso de la hora actual a un sistema local?impulso simple fecha de lectura humana de ahora

boost::posix_time::ptime now = boost::posix_time::second_clock::universal_time(); 
boost::posix_time::time_facet *facet = new boost::posix_time::time_facet("%d-%m-%Y %H:%M:%S"); 

He visto ejemplos que dicen que debo usar cout.imbue pero solo quiero una cadena simple.

Respuesta

6

se puede probar este código:

void FormatDateTime(
    std::string const&    format, 
    boost::posix_time::ptime const& date_time, 
    std::string&     result) 
    { 
    boost::posix_time::time_facet * facet = 
     new boost::posix_time::time_facet(format.c_str()); 
    std::ostringstream stream; 
    stream.imbue(std::locale(stream.getloc(), facet)); 
    stream << date_time; 
    result = stream.str(); 
    } 

formato Conjunto de "%d-%m-%Y %H:%M:%S" o cualquier faceta que desea.

Para la hora local, use boost::posix_time::second_clock::local_time() como segundo argumento (date_time).

+0

Esto no es específico para el equipo local ... necesito impulsar :: :: posix_time ptime ahora = impulso :: :: posix_time second_clock :: local_time(); – Bluebaron

+0

Todo lo demás es bueno. – Bluebaron

+0

no crea una nueva faceta y la imbuye cada vez que se llama a esta función, ¿causa una gran sobrecarga? – rve

3

Sé que es demasiado tarde, pero para los buscadores como yo:

#include <boost/format.hpp> 

const boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); 

const boost::wformat f = boost::wformat(L"%02d.%02d.%s %02d:%02d") 
       % now.date().year_month_day().dayas_number() 
       % now.date().year_month_day().month.as_number() 
       % now.date().year_month_day().year 
       % now.time_of_day().hours() 
       % now.time_of_day().minutes(); 

const std::wstring result = f.str(); // "21.06.2013 14:38" 
+0

debe ser day.as_number(). no se puede editar debido al límite de 6 caracteres. –

+0

He probado el código y el año no siempre tiene el formato correcto. A veces, el año contiene una coma (2.017.01.11-16: 18: 01), a veces no (2017.01.11-16: 18: 01), probado en Mac OS. Este std :: to_wstring (now.date(). Year_month_day(). Year) ayudó. – MPeli

Cuestiones relacionadas