2009-10-30 14 views
24

Il linguaggio C++ ha una classe temporale standard? O devo convertire in c-string prima di scrivere in un flusso. Esempio, voglio l'uscita della corrente data/ora per un flusso stringa:Esiste una classe data/ora standard in C++?

 
time_t tm(); 
ostringstream sout; 
sout << tm << ends; 

In questo caso ho la data/ora corrente scritto come un numero senza formattazione. Posso usare c- funzione di runtime strftime per formattare tm prima, ma che sembra come se non dovrebbe essere necessario se lo STL ha una classe di tempo che può essere istanziato dal valore time_t

+2

Esiste ora una proposta per una data/ora/fuso orario C++ completa e moderna prima del comitato: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html . Questa proposta è basata su questo repository github: https://github.com/HowardHinnant/date che ha un'implementazione completa, una documentazione completa e una community di utenti attivi. –

risposta

4

C'è anche un ctime (& time_t) metodo che emette string (char *).

+1

Che non è esattamente utile a meno che non sia necessario * esattamente * quel formato data/ora. Guardarlo mi fa solo rabbrividire; Non penso che avrei mai voluto vederlo in un'applicazione. – Joey

21

Non fa parte di STL ma la libreria ben nota è potenziata.

Vorrei utilizzare il modo di utilizzare boost::date. Ecco alcuni esempi: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial.

Se non hai ancora provato il boost, ti incoraggio a farlo perché ti salva da molti problemi sgradevoli, poiché maschera la maggior parte delle cose dipendenti dal SO come il threading ad esempio. Molte cose in boost sono solo intestazione (librerie di modelli). Tuttavia datetime richiede una lib o dll.

13

Nitpicking: Lo STL essere lo standard Template offerte Biblioteca con contenitore generico e gli algoritmi, ecc ed è improbabile per incorporare le classi per la gestione di data e di calcolo anche in futuro ...

Il C++ standard Biblioteca per sé comprende la STL e una versione precedente della libreria standard C. Quest'ultimo offre alcune funzioni relative alla data e all'ora tramite #include <ctime>, che è già stato menzionato sopra.

Se avvolgere (o semplicemente utilizzare) queste funzioni è sufficiente (e più veloce) di inserire boost, andare con questi. Non c'è niente di sbagliato in loro.

4

OK. Qui è più vicina che ho trovato di scrivere direttamente il tempo di un ruscello:

time_t t(time(NULL)); // current time 
tm tm(*localtime(&t)); 

std::locale loc(""); // current user locale 
ostringstream sout; 
const std::time_put<TCHAR> &tput = 
    std::use_facet<std::time_put<TCHAR> >(loc); 
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x')); 
sout << ends; 

CString sTest(sout.str().c_str()); 

Una guida molto utile è la guida Apache C++ standard Library Reference http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

ci sono get_time e put_time in <iomanip> intestazione (Immagino che questi siano venuti con C++ 11) che effettivamente fa la formattazione delle stringhe o l'analisi dei lavori.

Problemi correlati