libreria - time c++ ejemplo
Representación de cadena de time_t? (8)
time_t seconds;
time(&seconds);
cout << seconds << endl;
Esto me da una marca de tiempo. ¿Cómo puedo obtener esa fecha de época en una cadena?
std::string s = seconds;
No funciona
C ++ estándar no tiene funciones de fecha / hora propias, debe usar la localtime C y las funciones relacionadas.
Hay una gran variedad de formas en las que puede querer formatear la hora (dependiendo de la zona horaria, cómo desea mostrarla, etc.), por lo que no puede simplemente convertir implícitamente time_t en una cadena.
La forma C es usar ctime o strftime más gmtime o gmtime .
Si desea una forma más parecida a C ++ de realizar la conversión, puede investigar la biblioteca Boost.DateTime .
Intenta esto si quieres tener el tiempo en una cadena legible:
#include <ctime>
std::time_t now = std::time(NULL);
std::tm * ptm = std::localtime(&now);
char buffer[32];
// Format: Mo, 15.06.2009 20:20:00
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm);
Para mayor referencia de strftime () echa un vistazo a cppreference.com
La forma en C ++ es usar stringstream.
La forma C es usar snprintf () para formatear el número:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
La respuesta principal aquí no funciona para mí.
Vea los siguientes ejemplos que muestran tanto el stringstream como las respuestas de lexical_cast como se sugiere:
#include <iostream>
#include <sstream>
int main(int argc, char** argv){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::stringstream stream;
stream << t;
std::cout << t << "/" << stream.str() << std::endl;
}
Salida: 1485498912/1485498912 Encontrado here
#include <boost/lexical_cast.hpp>
#include <string>
int main(){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::string ts = boost::lexical_cast<std::string>(t);
std::cout << t << "/" << ts << std::endl;
return 0;
}
Salida: 1485498912/1485498912 Encontrado: here
La segunda solución mejor calificada funciona localmente:
#include <iostream>
#include <string>
#include <ctime>
int main(){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::tm * ptm = std::localtime(&t);
char buffer[32];
std::strftime(buffer, 32, "%Y-%m-%d %H:%M:%S", ptm);
std::cout << t << "/" << buffer;
}
Salida: 1485498912 / 2017-01-27 06:35:12 Encontrado: here
Pruebe std::stringstream
.
#include <string>
#include <sstream>
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
Un buen envoltorio alrededor de la técnica anterior es el lexical_cast
de Boost:
#include <boost/lexical_cast.hpp>
#include <string>
std::string ts = boost::lexical_cast<std::string>(seconds);
Y para preguntas como esta, me gusta vincular The String Formatters of Manor Farm de Herb Sutter.
ACTUALIZAR:
Con C ++ 11, use to_string()
.
la función "ctime ()" convertirá una hora en una cadena. Si desea controlar la forma en que se imprime, use "strftime". Sin embargo, strftime () toma un argumento de "struct tm". Use "localtime ()" para convertir el entero de 32 bits time_t en una estructura tm.
localtime no funcionó para mí. Utilicé localtime_s:
struct tm buf;
char dateString[26];
time_t time = time(nullptr);
localtime_s(&buf, &time);
asctime_s(dateString, 26, &buf);