2011-10-26 15 views
5

Qualcuno sa come ottenere un semplice formato di data da potenziare l'ora corrente a un sistema locale?boost semplice ora leggibile leggibile da oggi

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"); 

Ho visto esempi che dicono di usare cout.imbue ma voglio solo una semplice stringa.

risposta

6

si può provare questo codice:

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

Imposta formato di "%d-%m-%Y %H:%M:%S" o quello che volete sfaccettatura.

Per l'ora locale, utilizzare boost::posix_time::second_clock::local_time() come secondo argomento (date_time).

+0

Questo non è specifico per il computer locale ... ho bisogno di boost :: :: posix_time ptime ora = boost :: :: posix_time second_clock :: LOCAL_TIME(); – Bluebaron

+0

Tutto il resto va bene. – Bluebaron

+0

non crea una nuova sfaccettatura e l'infusione ogni volta che viene chiamata questa funzione causa un sovraccarico? – rve

3

Lo so che è troppo tardi, ma per i ricercatori come me:

#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

dovrebbe essere day.as_number(). impossibile modificare a causa del limite di 6 caratteri. –

+0

Ho testato il codice e l'anno non è sempre formattato correttamente. A volte l'anno contiene una virgola (2.017.01.11-16: 18: 01), a volte no (2017.01.11-16: 18: 01), testata su Mac OS. Questo std :: to_wstring (now.date(). Year_month_day(). Year) ha aiutato. – MPeli

Problemi correlati