Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

196
Visualizações
converting string into time using sscanf

I am trying to convert time string into time format in C on windows. As i just have hour, minutes and seconds in my string, so tried to parse the string using sscanf into time format and then use mktime. But somehow its not converting it into time format. To check, i tried to print the converted time into string back. The code looks like:

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 Respostas
Responde à pergunta

0

  1. you don't initialize your struct tm but only set tm_hour, tm_min, tm_sec and tm_isdst. All other fields are not initialized and therefore have unknown/undefined values.
  2. If you'd initialize your struct tm with a memset(&tm, 0, sizeof(tm)), you'd probably still receive an error because the fields held by the struct don't all allow 0 as valid value (tm_mday). See the docs for reference.
  3. The value you put into tm_sec is likely to be invalid. You actually want it to be ms/1000, not ms*1000.
over 4 years ago · Santiago Trujillo Relatório

0

Before calling mktime(), code needs to initialize 7+ fields of tm_struct(): year, month,day, hour min, sec, isdst and potentially others.

2 exceptions: .tm_yday, .tm_wday do not need assignment before calling mktime().

The year, month, day should be set to something reasonable: let us use 2000 Jan 1. Alternatively code could use time_t() to get today.

Code uses ms hinting that the value is in milliseconds. It is not. It is still in seconds.

Use local time_t variable rather than allocating one. malloc() not needed.

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda