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.

Antrromet
sumber
Kemungkinan duplikat tentang cara mendapatkan nilai tanggal dan waktu dalam program C
Nikhil Wagh

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)

mingos
sumber
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.

Erik
sumber
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;
}
zishan
sumber
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 .

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

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