Geçerli saati C cinsinden alın


98

Sistemimin o anki saatini almak istiyorum. Bunun için C'de aşağıdaki kodu kullanıyorum:

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

Sorun, bu kodun rastgele bir süre vermesidir. Ayrıca rastgele zaman her seferinde farklıdır. Sistemimin şimdiki zamanını istiyorum.


Yanıtlar:


127

Buradan kopyalayıp yapıştırıldı :

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

(C'de çalışması için main () argümanlar listesine "void" eklemeniz yeterlidir)


Tersini nasıl yapacağına dair bir fikrin var mı? string tm *?
Kaleci444

6
Muhtemelen biraz geç olduğunu biliyorum ve muhtemelen şimdiye kadar strptimechar *struct tm
çözmüşsünüz

1
Asctime () dizgesinin sonunda bir \ n bırakacaktır.
h7r

4
Yukarıdaki kod gereksizdir. asctime (localtime (& rawtime)), tek bir ctime (& rawtime) işlev çağrısına eşdeğerdir.
duleshi

1
Bilginize - Argüman olarak bir nesneye ihtiyacınız yok . Parametre olarak koymak , vb. Geçerli zamanı döndürmek için çalışır. time_ttime()NULL0
Super Cat

68

nowDeğişkeninizi başlatın .

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

localtimeFonksiyon geçirilen zaman değerini dönüştürmek için kullanılan time_tbir etmek struct tm, aslında sistem saatini almak değil.


35

Kolay yol:

#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
Bu, sonuna fazladan bir satırsonu ekler.
James Ko

Olmadan derlenmeyecek#include <string.h>
Deanie

14

Yanıtı yukarıdaki @mingos'tan genişletmek için, zamanımı belirli bir biçime ([gg mm yyyy hh: mm: ss]) biçimlendirmek için aşağıdaki işlevi yazdım.

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

Daha fazla bilgi hakkında struct tmbulunabilir burada .


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

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

7

çocuklar mevcut yerel saati almak için bu işlevi kullanabilirsiniz. gmtime istiyorsanız localtime yerine gmtime işlevini kullanın. şerefe

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

Sadece tarih olmadan saate ihtiyacınız varsa.

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

Saf metin kullanarak çözümünüz hakkında biraz ayrıntı verebilir misiniz?
Magnilex

2
void main()olmalıdır int main(void).
Keith Thompson

-9

beyler sistem saatini almanın yeni bir yolunu buldum. uzun olmasına ve aptalca çalışmalarla dolu olmasına rağmen, ancak bu şekilde sistem saatini tamsayı formatında alabilirsiniz.

#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
Linux'taki zaman kitaplıkları ve sistem çağrıları şaşırtıcı değil, ancak yine de onları kullanmak isteyeceksiniz, bir kabuk komutuna gidip onu ayrıştırmaya çalışmayın. Time, ctime ve rtc için man sayfalarına bakın.
Dana

18
Bu korkunç.
Manuel Reis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.