es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función strptime() produce horarios basura en C.

Intenté usar strptime() para analizar fechas en el formato ISO 8601 (especificado por “%F” o “%Y-%m-%d”), pero al leer de la estructura de resultado tm obtengo valores absurdos para la hora, minutos y segundos.

Aquí hay un ejemplo de código y el resultado:

char *s_date = (char *)malloc(sizeof(char) * 255);
scanf(‘%s’, s_date);

struct tm bd_date;
strptime(s_date, “%Y-%m-%d”, &bd_date);

printf(‘%d-%d-%d %d:%d:%d\n’, (bd_date.tm_year + 1900), (bd_date.tm_mon + 1), bd_date.tm_mday, bd_date.tm_hour, bd_date.tm_min, bd_date.tm_sec);

La salida resultante para la entrada “1990-05-01” es:
1990-5-1 2007659173:32766:1076394855, lo que muestra valores ilegales para tm_hour, tm_min y tm_sec.
¿Qué estoy haciendo mal? ¿hay algo que me esté perdiendo? Pensé que strptime() automáticamente establecería los campos no utilizados en el formato en 0, pero parece que este no es el caso.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con el especificador de formato utilizado en la declaración printf. En lugar de utilizar “%d” para imprimir los valores de bd_date.tm_hour, bd_date.tm_min y bd_date.tm_sec, intente utilizar el especificador de formato correcto para cada campo. Por ejemplo, utilice “%02d” para los campos de hora y minuto para asegurarse de que se impriman con ceros a la izquierda si es necesario.

    Además, sería buena idea inicializar la estructura tm antes de utilizarla con strptime(). Puede hacer esto llamando a memset() para establecer todos los campos en 0.

    Otra posibilidad es que haya algún otro código en su programa que esté corrompiendo los valores de bd_date después de ser establecidos por strptime(). Es posible que desee revisar cualquier otro lugar donde esté utilizando o modificando la estructura tm para asegurarse de que todo esté funcionando correctamente.

    En general, es difícil decir exactamente cuál es el problema sin ver más de su código y conocer más sobre el contexto en el que se está ejecutando. Sin embargo, intentar algunas de las sugerencias anteriores podría ayudarlo a reducir el problema y encontrar una solución.

Comments are closed.