2009-10-30 12 views
24

¿Tiene C++ stl una clase de tiempo estándar? O debo convertir a cadena de caracteres antes de escribir en una secuencia. Ejemplo, quiero dar salida a la fecha/hora actual de una corriente de cadena:¿Hay una clase de fecha/hora estándar en C++?

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

En este caso tengo la fecha/hora actual en escrito como un número sin ningún formato. Puedo usar la función de tiempo de ejecución c- strftime para formatear tm principio, pero que parece que no debería ser necesario si el STL tiene una clase de tiempo que se puede crear instancias de valor time_t

+2

Ahora hay una propuesta de una fecha/hora/zona horaria C++ completa y moderna ante el comité: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html . Esta propuesta se basa en este repositorio github: https://github.com/HowardHinnant/date, que tiene una implementación completa, documentación completa y una comunidad de usuarios activa. –

Respuesta

4

También hay un ctime (& time_t) método que produce una cadena (char *).

+1

Lo cual no es exactamente útil a menos que necesite * exactamente * ese formato de fecha/hora. Sin embargo, mirarlo solo me hace temblar; No creo que alguna vez quiera ver eso en una aplicación. – Joey

21

No pertenece a STL pero la biblioteca bien conocida es boost.

Me gustaría ir por el camino de usar boost::date. Aquí hay algunos ejemplos: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial.

Si aún no ha probado aumentar, lo animo a que lo haga, ya que le evita muchos problemas desagradables, ya que enmascara la mayoría de las cosas dependientes del sistema operativo, como el enhebrado, por ejemplo. Muchas cosas en boost son solo encabezado (bibliotecas de plantillas). Sin embargo, datetime requiere una lib o dll.

13

nitpicking: El STL siendo el estándar Plantilla ofertas de la biblioteca con contenedor genérico y algoritmos, etc., y es poco probable que incorporar clases para el manejo de fechas y cálculo, incluso en el futuro ...

la propia biblioteca estándar de C++ incluye la STL y una versión anterior de la biblioteca estándar de C. Este último ofrece algunas funciones relacionadas con la fecha y la hora a través del #include <ctime> que ya se ha mencionado anteriormente.

Si envolver (o simplemente usar) estas funciones es suficiente (y más rápido) que tirar en boost, vaya con éstas. No hay nada malo con ellos.

4

OK. Aquí está más cercano que he encontrado acerca de cómo escribir directamente el tiempo a una corriente:

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 guía muy útil es la Guía ++ Standard Reference Library Apache C http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

Hay get_time y put_time en <iomanip> cabecera (Supongo que estos vinieron con C++ 11) que efectivamente hace cadenas de formato o trabajos de análisis.

Cuestiones relacionadas