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.