2011-03-25 10 views
16

Estoy tratando de obtener la hora actual como una cadena formateada "YYYY-MM-DD-HH-MM-SS" en un elegante camino. Puedo tomar la hora actual en formato ISO desde la biblioteca "Date Time" de Boost, pero tiene otras cadenas de delimitación que no me funcionarán (estoy usando esto en un nombre de archivo). Por supuesto que puedo simplemente reemplazar las cadenas de delimitación, pero tengo la sensación de que hay una manera más agradable de hacerlo con las opciones de formato de fecha y hora. ¿Hay alguna manera de hacerlo, y si es así, cómo puedo usarlo?Obteniendo la hora actual como una cadena YYYY-MM-DD-HH-MM-SS

Respuesta

30

Use std::strftime, es estándar C++.

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    std::time_t rawtime; 
    std::tm* timeinfo; 
    char buffer [80]; 

    std::time(&rawtime); 
    timeinfo = std::localtime(&rawtime); 

    std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    std::puts(buffer); 

    return 0; 
} 
+0

Algo que escribe en un 'std :: string' y por lo tanto no tiene preocupaciones sobre desbordamientos de búfer sería bueno. Es comprensible que se espere que 'strftime' tenga una longitud máxima predecible. ¿Hay algún problema? –

+0

¿Hay alguna solución ** thread-safe **? Ver [enlace] (http://en.cppreference.com/w/cpp/chrono/c/localtime) - std :: localtime() no es seguro para subprocesos. – Yuri

2

La respuesta depende de lo que quiere decir con "tomar y llevar". Si está intentando generar una cadena de tiempo formateada, use strftime(). Si intenta analizar una cadena de texto en formato binario, use strptime().

Cuestiones relacionadas