Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
convirtiendo cadena en tiempo usando sscanf

Estoy tratando de convertir la cadena de tiempo en formato de tiempo en C en Windows. Como solo tengo horas, minutos y segundos en mi cadena, intenté analizar la cadena usando sscanf en formato de hora y luego usé mktime. Pero de alguna manera no lo está convirtiendo en formato de tiempo. Para verificar, traté de imprimir el tiempo convertido en una cadena. El código se parece a:

 struct tm tm; char time_buffer[100]; int hh, mm; float ms; time_t time_value; char *timestamp = {"16:11:56.484"}; sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ms); tm.tm_hour =hh; tm.tm_min = mm; tm.tm_sec = ms*1000; tm.tm_isdst = -1; time_value = malloc(100*sizeof(char)); time_value = mktime(&tm); if (time_value==-1) printf ("unable to make time"); strftime(time_buffer, sizeof(time_buffer), "%c", &tm); printf(time_buffer);
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

  1. no inicializa su struct tm , sino que solo configura tm_hour , tm_min , tm_sec y tm_isdst . Todos los demás campos no se inicializan y, por lo tanto, tienen valores desconocidos o indefinidos.
  2. Si inicializara su struct tm con un memset(&tm, 0, sizeof(tm)) , probablemente aún recibiría un error porque los campos contenidos en la estructura no permiten 0 como valor válido ( tm_mday ). Consulte los documentos como referencia.
  3. Es probable que el valor que ingresa en tm_sec no sea válido. En realidad, desea que sea ms/1000 , no ms*1000 .
over 4 years ago · Santiago Trujillo Denunciar

0

Antes de llamar a mktime() , el código debe inicializar más de 7 campos de tm_struct() : year, month,day, hour min, sec, isdst y potencialmente otros.

2 excepciones: .tm_yday, .tm_wday no necesitan asignación antes de llamar a mktime() .

El año, el mes y el día deben establecerse en algo razonable: usemos el 1 de enero de 2000. Alternativamente, el código podría usar time_t() para obtener el día de hoy.

El código usa ms insinuando que el valor está en milisegundos. No lo es. Todavía está en segundos.

Utilice la variable time_t local en lugar de asignar una. malloc() no es necesario.

 struct tm tm = {0}; tm.tm_year = 2000 - 1900; // Years from 1900 tm.tm_mon = 1 - 1; // Months from January tm.tm_mday = 1; char time_buffer[100]; int hh, mm; float ss; time_t time_value; char *timestamp = "16:11:56.484"; if (sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ss) != 3) Handle_BadData(); tm.tm_hour = hh; tm.tm_min = mm; tm.tm_sec = roundf(ss); // or simply = ss; tm.tm_isdst = 0; // Keep in standard time // time_value = malloc(100*sizeof(char)); time_value = mktime(&tm); if (time_value == -1) { printf ("unable to make time"); } else { strftime(time_buffer, sizeof(time_buffer), "%c", &tm); printf(time_buffer); } // Sat Jan 1 16:11:56 2000
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda