Obtenha a hora atual em C

97

Quero obter a hora atual do meu sistema. Para isso estou usando o seguinte código em C:

time_t now;
struct tm *mytime = localtime(&now); 
if ( strftime(buffer, sizeof buffer, "%X", mytime) )
{
    printf("time1 = \"%s\"\n", buffer);
}

O problema é que esse código está dando algum tempo aleatório. Além disso, o tempo aleatório é diferente a cada vez. Eu quero a hora atual do meu sistema.

Antrromet
fonte
Possível duplicata de como obter o valor de data e hora no programa C
Nikhil Wagh

Respostas:

126

Copiado e colado daqui :

/* localtime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "Current local time and date: %s", asctime (timeinfo) );

  return 0;
}

(basta adicionar "void" à lista de argumentos principais () para que funcione em C)

mingos
fonte
alguma ideia de como fazer o contrário? string para tm *?
Goaler444
6
Eu sei que provavelmente é um pouco tarde e você provavelmente já percebeu, mas você usaria a strptimefunção em time.h para converter de char *parastruct tm
KingRadical
1
Observe que asctime () deixará um \ n no final da string.
h7r
4
O código acima é redundante. asctime (localtime (& rawtime)) é equivalente a uma única chamada de função ctime (& rawtime).
duleshi
1
FYI - Você não precisa de um time_tobjeto como argumento para time(). Colocando NULL, 0, etc como o parâmetro trabalha para retornar o tempo atual.
Super Cat
68

Inicialize sua nowvariável.

time_t now = time(0); // Get the system time

A localtimefunção é usada para converter o valor de hora no passado time_tpara um struct tm, ela não recupera realmente a hora do sistema.

Erik
fonte
35

Jeito fácil:

#include <time.h>
#include <stdio.h>

int main(void)
{
    time_t mytime = time(NULL);
    char * time_str = ctime(&mytime);
    time_str[strlen(time_str)-1] = '\0';
    printf("Current Time : %s\n", time_str);

    return 0;
}
Zishan
fonte
1
Isso acrescenta uma nova linha extra no final.
James Ko
Não compilará sem#include <string.h>
Deanie
13

Para estender a resposta de @mingos acima, escrevi a função abaixo para formatar meu tempo em um formato específico ([dd mm aaaa hh: mm: ss]).

// Store the formatted string of time in the output
void format_time(char *output){
    time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );

    sprintf(output, "[%d %d %d %d:%d:%d]",timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
}

Mais informações sobre struct tmpodem ser encontradas aqui .

hexineter
fonte
10
#include<stdio.h>
#include<time.h>

void main()
{
    time_t t;
    time(&t);
    printf("\n current time is : %s",ctime(&t));
}
guneet
fonte
6

rapazes, vocês podem usar esta função para obter a hora local atual. se você quiser gmtime, use a função gmtime em vez de localtime. Felicidades

time_t my_time;
struct tm * timeinfo; 
time (&my_time);
timeinfo = localtime (&my_time);
CCLog("year->%d",timeinfo->tm_year+1900);
CCLog("month->%d",timeinfo->tm_mon+1);
CCLog("date->%d",timeinfo->tm_mday);
CCLog("hour->%d",timeinfo->tm_hour);
CCLog("minutes->%d",timeinfo->tm_min);
CCLog("seconds->%d",timeinfo->tm_sec);
Shauket Sheikh
fonte
2

Se você só precisa do tempo sem a data.

  time_t rawtime;
  struct tm * timeinfo;
  time( &rawtime );
  timeinfo = localtime( &rawtime );
  printf("%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, 
    timeinfo->tm_sec);
kame
fonte
1
#include <stdio.h>
#include <time.h>

void main()
{
    time_t t;
    time(&t);
    clrscr();

    printf("Today's date and time : %s",ctime(&t));
    getch();
}
user309026
fonte
Você poderia elaborar um pouco sobre sua solução usando texto puro?
Magnilex
2
void main()deveria ser int main(void).
Keith Thompson
-9

caras, eu tenho uma nova maneira de obter a hora do sistema. embora seja longo e cheio de trabalhos bobos, desta forma você pode obter a hora do sistema em formato inteiro.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    char hc1,hc2,mc1,mc2;
    int hi1,hi2,mi1,mi2,hour,minute;
    system("echo %time% >time.txt");
    fp=fopen("time.txt","r");
    if(fp==NULL)
       exit(1) ;
    hc1=fgetc(fp);
    hc2=fgetc(fp);
    fgetc(fp);
    mc1=fgetc(fp);
    mc2=fgetc(fp);
    fclose(fp);
    remove("time.txt");
    hi1=hc1;
    hi2=hc2;
    mi1=mc1;
    mi2=mc2;
    hi1-=48;
    hi2-=48;
    mi1-=48;
    mi2-=48;
    hour=hi1*10+hi2;
    minute=mi1*10+mi2;
    printf("Current time is %d:%d\n",hour,minute);
    return 0;
}
p2013
fonte
7
As bibliotecas de tempo e chamadas de sistema no Linux não são surpreendentes, mas mesmo assim você gostaria de usá-las, não vá até um comando shell e tente analisá-lo. Consulte as páginas de manual para time, ctime e rtc.
Dana
18
Isso é terrível.
Manuel Reis