hora funciones fecha ejemplos c++ c datetime

c++ - funciones - Conversión de fecha/hora: representación de cadena a time_t



funciones de fecha y hora en c++ (6)

En ausencia de strptime puede usar sscanf para analizar los datos en una struct tm y luego llamar a mktime . No es la solución más elegante, pero funcionaría.

¿Cuál es la mejor manera de convertir una cadena de fecha, formateada como "MM-DD-YY HH:MM:SS" , a un valor de time_t en C o C ++?



Me temo que no hay ninguno en el estándar C / C ++. Está el strptime función POSIX que puede convertirse en struct tm , que luego puede convertirse en time_t usando mktime .

Si está buscando la compatibilidad multiplataforma, mejor use boost::date_time , que tiene funciones sofisticadas para esto.


Utilice strptime() para analizar el tiempo en una struct tm , luego use mktime() para convertir a un time_t .


static time_t MKTimestamp(int year, int month, int day, int hour, int min, int sec) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = gmtime ( &rawtime ); timeinfo->tm_year = year-1900 ; timeinfo->tm_mon = month-1; timeinfo->tm_mday = day; timeinfo->tm_hour = hour; timeinfo->tm_min = min; timeinfo->tm_sec = sec; timeinfo->tm_isdst = 0; // disable daylight saving time time_t ret = mktime ( timeinfo ); return ret; } static time_t GetDateTime(const std::string pstr) { try { // yyyy-mm-dd int m, d, y, h, min; std::istringstream istr (pstr); istr >> y; istr.ignore(); istr >> m; istr.ignore(); istr >> d; istr.ignore(); istr >> h; istr.ignore(); istr >> min; time_t t; t=MKTimestamp(y,m,d,h-1,min,0); return t; } catch(...) { } }


Estoy tratando de procesar la fecha y hora almacenadas. Guardo el archivo en la fecha y hora GMT en formato de cadena (es decir, DDMMYYYYHHMMSS). Cuando las consultas del cliente a continuación, convierto esta cadena de fecha y hora a formato struct tm y luego lo convierte a segundos usando mktime. Lo hago para verificar el DateTime no válido. De nuevo, convierto segundos a formato de cadena. Todos estos procesos están bien y no hay ningún problema.

Pero tengo un problema con Weied, es decir, guardé la fecha y la hora en GMT y localicé también GMT. Debido al ahorro de luz diurna, mi hora local cambió a GMT + 1 ahora si consulto la fecha y hora almacenadas obtengo 1 hora menos porque la función mktime usa la configuración regional, es decir GMT + 1 para convertir struct tm en segundos (tm_isdst establecido en -1 por lo que mktime detecta los ahorros de luz diurna, etc. automáticamente).

Alguna idea, como resolver este problema?