web-dev-qa-db-fra.com

Existe-t-il une classe de date / heure standard en C ++?

Est-ce que C++ stl a une classe horaire standard? Ou dois-je convertir en chaîne c avant d'écrire dans un flux. Exemple, je veux sortir la date/heure actuelle dans un flux de chaînes:

 time_t tm (); 
 ostringstream sout; 
 sout << tm << se termine; 

Dans ce cas, je reçois la date/heure actuelle sous forme de nombre sans aucune mise en forme. Je peux utiliser la fonction c-runtime strftime pour formater tm en premier, mais cela ne semble pas nécessaire si la stl a une classe de temps qui peut être instanciée à partir de la valeur time_t

28
Farid Z

Ne fait pas partie de STL mais la bibliothèque bien connue est boost.

J'irais dans le sens de l'utilisation de boost::date. Voici quelques exemples: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial .

Si vous n'avez pas encore essayé boost, je vous encourage à le faire car cela vous évite de nombreux problèmes désagréables, car il masque la plupart des choses dépendantes du système d'exploitation comme le filetage par exemple. Beaucoup de choses dans boost ne sont que des en-têtes (bibliothèques de modèles). Cependant datetime nécessite une lib ou une dll.

22
jdehaan

Nitpicking: La STL étant le modèle standard La bibliothèque traite des conteneurs et des algorithmes génériques, etc. et il est peu probable qu'elle intègre des classes pour la gestion et le calcul des dates, même à l'avenir. …

La bibliothèque standard C++ elle-même comprend la STL et une version précédente de la bibliothèque standard C. Ce dernier propose des fonctions liées à la date et à l'heure via #include <ctime> qui a déjà été mentionné ci-dessus.

Si encapsuler (ou simplement utiliser) ces fonctions est suffisant (et plus rapide) que de tirer boost , allez-y. Il n'y a rien de mal avec eux.

13
mkluwe

Il y a get_time et put_time dans l'en-tête <iomanip> (je suppose que ceux-ci sont fournis avec C++ 11) qui effectue efficacement le formatage des chaînes ou l'analyse des tâches.

6
zahir

Il existe également une méthode ctime (& time_t) qui génère une chaîne (char *).

4
bua

D'ACCORD. Voici le plus proche que j'ai trouvé sur l'écriture directe du temps dans un flux:

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

Un guide très utile est le Guide de référence de la bibliothèque standard Apache C++ http://stdcxx.Apache.org/doc/stdlibref/time-put.html#sec1

4
Farid Z

C++ dispose désormais des bibliothèques chrono pour la date et l'heure. Ceci est documenté sur http://en.cppreference.com/w/cpp/chrono et http://www.cplusplus.com/reference/chrono/

3
Curg