Holen Sie sich die aktuelle Zeit in C.


97

Ich möchte die aktuelle Uhrzeit meines Systems abrufen. Dafür verwende ich den folgenden Code in C:

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

Das Problem ist, dass dieser Code eine zufällige Zeit gibt. Außerdem ist die zufällige Zeit jedes Mal anders. Ich möchte die aktuelle Zeit meines Systems.


Antworten:


126

Von hier kopiert :

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

(Fügen Sie einfach "void" zur Liste der Argumente von main () hinzu, damit dies in C funktioniert.)


Irgendeine Idee, wie man es umgekehrt macht? Zeichenfolge zu tm *?
Goaler444

6
Ich weiß, es ist wahrscheinlich ein bisschen spät und Sie haben es wahrscheinlich schon herausgefunden, aber Sie würden die strptimeFunktion in time.h verwenden , um von char *zustruct tm
KingRadical

1
Beachten Sie, dass asctime () am Ende der Zeichenfolge ein \ n hinterlässt.
7.

4
Der obige Code ist redundant. asctime (localtime (& rawtime)) entspricht einem einzelnen Funktionsaufruf von ctime (& rawtime).
Duleshi

1
FYI - Sie nicht brauchen ein time_tObjekt als Argument für time(). Putting NULL, 0usw. als Parameter arbeitet die aktuelle Uhrzeit zurückzukehren.
Super Cat

68

Initialisieren Sie Ihre nowVariable.

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

Die localtimeFunktion wird der Zeitwert in dem vergangen konvertieren , time_tum eine struct tm, ist es nicht eigentlich die Systemzeit abzurufen.


35

Einfacher Weg:

#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
Dies fügt am Ende einen zusätzlichen Zeilenumbruch hinzu.
James Ko

Wird nicht kompilieren ohne#include <string.h>
Deanie

13

Um die Antwort von @mingos oben zu erweitern, habe ich die folgende Funktion geschrieben, um meine Zeit auf ein bestimmtes Format zu formatieren ([TT MM JJJJ 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);
}

Weitere Informationen struct tmzu finden Sie hier .


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

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

6

Leute, mit dieser Funktion können Sie die aktuelle Ortszeit abrufen. Wenn Sie gmtime möchten, verwenden Sie die Funktion gmtime anstelle von localtime. Prost

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

Wenn Sie nur die Zeit ohne Datum benötigen.

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

Könnten Sie Ihre Lösung mit reinem Text etwas näher erläutern?
Magnilex

2
void main()sollte sein int main(void).
Keith Thompson

-8

Jungs, ich habe einen neuen Weg, um Systemzeit zu bekommen. Es ist zwar langwierig und voller alberner Arbeiten, aber auf diese Weise können Sie die Systemzeit im Ganzzahlformat erhalten.

#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
Die Zeitbibliotheken und Systemaufrufe unter Linux sind nicht erstaunlich, aber trotzdem möchten Sie sie verwenden, nicht zu einem Shell-Befehl gehen und versuchen, ihn zu analysieren. In den Manpages finden Sie Zeit und Zeit und RTC.
Dana

17
Das ist fürchterlich.
Manuel Reis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.