time_t seconds;
time(&seconds);
cout << seconds << endl;
Esto me da una marca de tiempo. ¿Cómo puedo poner esa fecha de época en una cadena?Representación de cadena de time_t?
std::string s = seconds;
no funciona
time_t seconds;
time(&seconds);
cout << seconds << endl;
Esto me da una marca de tiempo. ¿Cómo puedo poner esa fecha de época en una cadena?Representación de cadena de time_t?
std::string s = seconds;
no funciona
Trate std::stringstream
.
#include <string>
#include <sstream>
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
Una buena envoltura alrededor de la técnica anterior es de lexical_cast
Boost:
#include <boost/lexical_cast.hpp>
#include <string>
std::string ts = boost::lexical_cast<std::string>(seconds);
Y para este tipo de preguntas, soy aficionado a la vinculación de The String Formatters of Manor Farm por Herb Sutter.
UPDATE:
Con C++ 11, utilice to_string()
.
El estándar C++ no tiene ninguna función de fecha/hora. Necesita usar el C localtime y funciones relacionadas.
Pruebe esto si usted quiere 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() Salida cppreference.com
nulldevice, no estaba claro anteriormente, pero quería una representación de cadena de la fecha de época (indicación de fecha y hora). – g33kz0r
la "ctime()" función convertirá una vez a una cadena. Si desea controlar la forma en que está impreso, use "strftime". Sin embargo, strftime() toma un argumento de "struct tm". Utilice "localtime()" para convertir el entero time_t de 32 bits en una struct tm.
Hay muchas formas en que puede querer formatear el tiempo (dependiendo de la zona horaria, cómo quiere mostrarlo, etc.), por lo que no puede convertir implícitamente un time_t en una cadena.
La manera C es usar ctime o usar strftime más localtime o gmtime.
Si desea una forma más similar a C++ de realizar la conversión, puede investigar la biblioteca Boost.DateTime.
Actualizado. Gracias. –
La manera de C++ es usar stringstream.
El C manera es utilizar snprintf() para formatear el número:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
time_t no es necesariamente sin signo o del mismo tamaño que un largo. De hecho, generalmente está firmado: http://stackoverflow.com/questions/471248/what-is-ultimately-a-time-t-typedef-to – nitzanms
La respuesta aquí arriba no funciona para mí.
Ver los siguientes ejemplos que demuestran tanto la stringstream y respuestas 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;
}
de 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;
}
de salida: 1485498912/1485498912 Encontrado : here
La segunda solución de más alto rating 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/27/01/2017 06:35:12 Encontrado: here
Su pregunta original preguntó cómo para obtener una cita, pero resulta que lo que realmente quería era la cantidad de segundos como una cadena. Ayuda a ser preciso. –