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.

Antrromet
quelle
Mögliches Duplikat, wie man Datums- und Zeitwert im C-Programm
erhält

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

Mingos
quelle
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.

Erik
quelle
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;
}
Zishan
quelle
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 .

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

void main()
{
    time_t t;
    time(&t);
    printf("\n current time is : %s",ctime(&t));
}
Guneet
quelle
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);
Shauket Sheikh
quelle
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);
kame
quelle
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
quelle
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;
}
p2013
quelle
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