2012-05-07 7 views
7

Ho una stringa formattata come "2012-03-28T08: 00: 00". Voglio ottenere anno, mese (in formato stringa), data, ora, minuti, secondi e giorno (in formato stringa). qualcuno può suggerirmi il modo più semplice per farlo in boost.come ottenere boost :: posix_time :: ptime da stringa formattata

grazie

+0

È la stringa sempre in formato ISO che avete chiesto di nella tua domanda o non avete bisogno di accettare qualsiasi formato di corda? – tinman

risposta

9

Se i metodi esistenti from_string() non soddisfano le proprie esigenze, è possibile utilizzare un aspetto di input di tempo che consente di personalizzare il formato da cui viene analizzata la stringa.

Nel tuo caso è possibile utilizzare la stringa di formato esteso ISO in modo da poter utilizzare il seguente codice per analizzare le stringhe:

boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet; 
    tif->set_iso_extended_format(); 
    std::istringstream iss("2012-03-28T08:00:00"); 
    iss.imbue(std::locale(std::locale::classic(), tif)); 
    iss >> abs_time; 
    std::cout << abs_time << std::endl; 
+0

ha funzionato ... grazie mille – Dev

+2

Bello ma quel "nuovo" è brutto. Si può aggirare il problema costruendo il facet in questo modo: "boost :: posix_time :: time_input_facet tif (1)". L'argomento "1" non significa affari divertenti con proprietà e vite ... –

9

Senza usare sfaccettature;

ptime dateTime = boost::date_time::parse_delimited_time<ptime>(string, 'T');

Le due from*_string funzioni hanno dei limiti su ciò che vengono convertiti i formati.

  • Non accetta "T": time_from_string(s).
  • Non accetta '-': from_iso_string(s).

Roundtropping ISO 8601 data/ora in boost;

std::string date = to_iso_extended_string(dateTime);

Problemi correlati