Obtenir l'heure actuelle en C

97

Je veux obtenir l'heure actuelle de mon système. Pour cela, j'utilise le code suivant en C:

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

Le problème est que ce code donne un temps aléatoire. De plus, le temps aléatoire est différent à chaque fois. Je veux l'heure actuelle de mon système.

Antrromet
la source

Réponses:

126

Copier-collé à partir d' ici :

/* 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;
}

(ajoutez simplement "void" à la liste d'arguments main () pour que cela fonctionne en C)

mingos
la source
une idée comment faire l'inverse? chaîne en tm *?
Goaler444
6
Je sais qu'il est probablement un peu tard et que vous l'avez probablement compris maintenant, mais vous utiliseriez la strptimefonction in time.h pour convertir de char *enstruct tm
KingRadical
1
Notez que asctime () laissera un \ n à la fin de la chaîne.
h7r
4
Le code ci-dessus est redondant. asctime (localtime (& rawtime)) équivaut à un seul appel de fonction ctime (& rawtime).
duleshi
1
FYI - Vous n'avez pas besoin d' un time_tobjet comme argument pour time(). Mettre NULL, 0etc comme paramètre fonctionne pour renvoyer l'heure actuelle.
Super Cat
68

Initialisez votre nowvariable.

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

La localtimefonction est utilisée pour convertir la valeur de l'heure dans le passé time_ten a struct tm, elle ne récupère pas réellement l'heure système.

Erik
la source
35

Moyen facile:

#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
la source
1
Cela ajoute une nouvelle ligne supplémentaire à la fin.
James Ko
Ne compile pas sans#include <string.h>
Deanie
13

Pour étendre la réponse de @mingos ci-dessus, j'ai écrit la fonction ci-dessous pour formater mon temps dans un format spécifique ([jj 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);
}

Plus d'informations sur struct tmpeuvent être trouvées ici .

hexinpètre
la source
10
#include<stdio.h>
#include<time.h>

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

les gars, vous pouvez utiliser cette fonction pour obtenir l'heure locale actuelle. si vous voulez gmtime, utilisez la fonction gmtime au lieu de localtime. à votre santé

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
la source
2

Si vous avez juste besoin de l'heure sans la date.

  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
la source
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
la source
Pourriez-vous élaborer un peu votre solution en utilisant du texte pur?
Magnilex
2
void main()devrait être int main(void).
Keith Thompson
-9

les gars, j'ai une nouvelle façon d'obtenir l'heure du système. bien que ce soit long et plein de travaux stupides, mais de cette façon, vous pouvez obtenir l'heure du système au format entier.

#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
la source
7
Les bibliothèques de temps et les appels système sous Linux ne sont pas étonnants, mais même ainsi vous voudriez les utiliser, ne pas passer à une commande shell et essayer de l'analyser. Voir les pages de manuel pour time, ctime et rtc.
Dana
18
C'est terrible.
Manuel Reis