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.


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)


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.


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

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 .


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

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

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);

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);

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();
}

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.