Dapatkan waktu saat ini di C


97

Saya ingin mendapatkan waktu saat ini dari sistem saya. Untuk itu saya menggunakan kode berikut di C:

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

Masalahnya adalah kode ini memberikan waktu acak. Juga, waktu acak berbeda setiap saat. Saya ingin waktu saat ini dari sistem saya.


Jawaban:


126

Salin-tempel dari sini :

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

(cukup tambahkan "void" ke daftar argumen main () agar ini berfungsi di C)


tahu bagaimana melakukan sebaliknya? string ke tm *?
Goaler444

6
Saya tahu ini mungkin agak terlambat dan Anda mungkin sudah mengetahuinya sekarang, tetapi Anda akan menggunakan strptimefungsi di time.h untuk mengonversi dari char *menjadistruct tm
KingRadical

1
Perhatikan bahwa asctime () akan meninggalkan \ n di akhir string.
h7r

4
Kode di atas berlebihan. asctime (localtime (& rawtime)) setara dengan satu panggilan fungsi ctime (& rawtime).
duleshi

1
FYI - Anda tidak perlu sebuah time_tobjek sebagai argumen untuk time(). Menempatkan NULL,, 0dll sebagai parameter berfungsi untuk mengembalikan waktu saat ini.
Super Cat

68

Inisialisasi nowvariabel Anda .

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

The localtimeFungsi ini digunakan untuk mengkonversi nilai waktu dalam berlalu time_tke struct tm, itu tidak benar-benar mengambil waktu sistem.


35

Jalan mudah:

#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
Ini menambahkan baris baru ekstra di akhir.
James Ko

Tidak akan dikompilasi tanpa#include <string.h>
Deanie

13

Untuk memperluas jawaban dari @mingos di atas, saya menulis fungsi di bawah ini untuk memformat waktu saya ke format tertentu ([dd mm yyyy 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);
}

Informasi lebih lanjut tentang struct tmdapat ditemukan di sini .


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

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

6

teman-teman Anda dapat menggunakan fungsi ini untuk mendapatkan waktu setempat saat ini. jika Anda ingin gmtime maka gunakan fungsi gmtime daripada localtime. Bersulang

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

Jika Anda hanya membutuhkan waktu tanpa tanggal.

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

Bisakah Anda menguraikan sedikit tentang solusi Anda menggunakan teks murni?
Magnilex

2
void main()seharusnya int main(void).
Keith Thompson

-9

kawan, saya mendapat cara baru mendapatkan waktu sistem. Meskipun panjang dan penuh dengan pekerjaan konyol tetapi dengan cara ini Anda bisa mendapatkan waktu sistem dalam format integer.

#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
Perpustakaan waktu dan panggilan sistem di Linux tidak mencengangkan, tetapi meskipun demikian Anda ingin menggunakannya, tidak menggunakan perintah shell dan mencoba menguraikannya. Lihat halaman manual untuk waktu dan waktu dan rtc.
Dana

18
Ini mengerikan.
Manuel Reis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.