2009-10-30 6 views
24

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

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

Dans ce cas, je reçois la date/heure écrite comme un nombre sans mise en forme. Je peux utiliser fonction d'exécution c- strftime pour formater tm d'abord, mais qui semble comme il ne devrait pas être nécessaire si le TSL a une classe de temps qui peut être instancié de la valeur time_t

+2

Il y a maintenant une proposition pour une date/heure/fuseau horaire C++ complète et moderne devant le comité: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html . Cette proposition est basée sur ce référentiel github: https://github.com/HowardHinnant/date qui a une implémentation complète, une documentation complète et une communauté d'utilisateurs active. –

Répondre

4

Il y a aussi un ctime (& time_t) méthode qui sort la chaîne (char *).

+1

Ce qui n'est pas vraiment utile à moins que vous ayez besoin de * exactement * ce format date/heure. Le regarder ne me fait que frissonner; Je ne pense pas que je voudrais voir ça dans une application. – Joey

21

Ne fait pas partie du STL mais la bibliothèque bien connue est boost. Je voudrais aller à la façon d'utiliser 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 essayé le boost, je vous encourage à le faire car il vous évite de nombreux problèmes, car il masque la plupart des choses dépendantes du système d'exploitation comme le threading par exemple. Beaucoup de choses dans boost sont en-tête seulement (bibliothèques de modèles). Cependant datetime nécessite une lib ou une DLL.

13

tatillonne: La STL étant la norme modèle traite de la bibliothèque avec conteneur générique et les algorithmes, etc., et il est peu probable d'intégrer des classes pour la manipulation et la date de calcul, même dans l'avenir ...

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

Si l'enrubannage (ou simplement l'utilisation) de ces fonctions est suffisant (et plus rapide) que de tirer sur boost, procédez comme suit. Il n'y a rien de mal avec eux.

4

OK. Voici le plus proche, j'ai trouvé écrit sur directement le temps d'un cours d'eau:

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 la bibliothèque standard Apache C++ Guide de référence http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

Il y a tête get_time et put_time dans <iomanip> (Je suppose que ceux-ci sont venus avec C++ 11) qui effectue effectivement des travaux de formatage ou d'analyse de chaîne.