2013-07-23 26 views
17

C'è un modo semplice in C++ 11 per stampare il tempo di parete corrente utilizzando le regole di formattazione appropriate della locale associata con l'ostream in uso?Come stampare l'ora corrente in C++ 11?

Quello che voglio fare è qualcosa di simile:

myStream << std::chrono::system_clock::now(); 

e la data e l'ora stampate in accordo con qualsiasi locale è associato con myStream. C++ 11 offre put_time, ma ci vuole una stringa di formattazione, e voglio il formato da determinare da parte del socio locale con il flusso. C'è anche time_put e time_put_byname, ma sulla base degli esempi a cppreference.com, queste funzioni vengono utilizzati in combinazione con put_time.

Non c'è un modo semplice per stampare un valore timepoint senza formattare manualmente?

risposta

16

È possibile utilizzare put_time con una stringa di formato come "%c". %c è l'identificatore di formato per la data e l'ora stringa standard per le impostazioni internazionali. Il risultato si presenta come "Mar 23 Lug 19:32:18 CEST 2013" sulla mia macchina (POSIX locale en_US, in un fuso orario tedesco).

auto now = std::chrono::system_clock::now(); 
auto now_c = std::chrono::system_clock::to_time_t(now); 
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n'; 
+9

Sono sorpreso dal fatto che non esiste un modo * moderno * per stampare dati datetime. Dobbiamo utilizzare le API C di vecchio stile. Ma, bene, 'std :: chrono' è un grande passo avanti in materia di datetime. Ma non c'è modo di stampare C++ 11? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) non era standardizzato (non è sicuro se fosse dovuto a pressioni temporali o per altri motivi). –

+0

@RMartinhoFernandes Grazie! Non lo sapevo. – Manu343726