Nhận thời gian hiện tại ở C


97

Tôi muốn lấy thời gian hiện tại của hệ thống của mình. Đối với điều đó, tôi đang sử dụng mã sau trong C:

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

Vấn đề là mã này đang cung cấp một số thời gian ngẫu nhiên. Ngoài ra, thời gian ngẫu nhiên là khác nhau mọi lúc. Tôi muốn thời gian hiện tại của hệ thống của tôi.


Câu trả lời:


126

Đã sao chép từ đây :

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

(chỉ cần thêm "void" vào danh sách đối số main () để điều này hoạt động trong C)


bất kỳ ý tưởng làm thế nào để làm theo cách khác? chuỗi thành tm *?
Thủ môn 444

6
Tôi biết nó có thể là hơi muộn và bạn đã có thể hình dung nó ra bởi bây giờ, nhưng bạn sẽ sử dụng các strptimechức năng trong time.h để chuyển đổi từ char *tớistruct tm
KingRadical

1
Lưu ý rằng asctime () sẽ để lại một \ n ở cuối chuỗi.
h7r

4
Đoạn mã trên là thừa. asctime (localtime (& rawtime)) tương đương với một lệnh gọi hàm ctime (& rawtime) duy nhất.
duleshi

1
FYI - Bạn không cần một time_tđối tượng làm đối số time(). Đặt NULL, 0v.v. khi tham số hoạt động để trả về thời gian hiện tại.
Super Cat

68

Khởi tạo nowbiến của bạn .

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

Các localtimechức năng được sử dụng để chuyển đổi các giá trị thời gian trong truyền time_tđến một struct tm, nó không thực sự lấy thời gian hệ thống.


35

Cách dễ dàng:

#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
Điều này thêm một dòng mới ở cuối.
James Ko

Sẽ không biên dịch nếu không có#include <string.h>
Deanie

13

Để mở rộng câu trả lời từ @mingos ở trên, tôi đã viết hàm dưới đây để định dạng thời gian của tôi thành một định dạng cụ thể ([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);
}

Thông tin thêm về struct tmcó thể được tìm thấy ở đây .


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

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

6

bạn có thể sử dụng chức năng này để xem giờ địa phương hiện tại. nếu bạn muốn gmtime thì hãy sử dụng hàm gmtime thay vì localtime. hoan hô

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

Nếu bạn chỉ cần thời gian mà không cần ngày.

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

Bạn có thể giải thích một chút về giải pháp của mình bằng cách sử dụng văn bản thuần túy không?
Magnilex

2
void main()nên được int main(void).
Keith Thompson,

-9

các bạn, tôi có một cách mới để lấy thời gian hệ thống. mặc dù dài dòng và đầy những tác phẩm ngớ ngẩn nhưng bằng cách này, bạn có thể lấy thời gian hệ thống ở định dạng số nguyên.

#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
Thư viện thời gian và lệnh gọi hệ thống trong Linux không có gì đáng kinh ngạc, nhưng bạn vẫn muốn sử dụng chúng chứ không phải đi ra ngoài lệnh shell và cố gắng phân tích cú pháp. Xem các trang người đàn ông để biết thời gian và ctime và rtc.
Dana

18
Điều này thật tồi tệ.
Manuel Reis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.