รับเวลาปัจจุบันใน C


100

ฉันต้องการรับเวลาปัจจุบันของระบบของฉัน สำหรับสิ่งนั้นฉันใช้รหัสต่อไปนี้ใน C:

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

ปัญหาคือรหัสนี้ให้เวลาสุ่ม นอกจากนี้เวลาสุ่มยังแตกต่างกันทุกครั้ง ฉันต้องการเวลาปัจจุบันของระบบของฉัน


คำตอบ:


128

คัดลอกวางจากที่นี่ :

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

(เพียงแค่เพิ่ม "void" ในรายการอาร์กิวเมนต์หลัก () เพื่อให้สิ่งนี้ทำงานใน C)


มีความคิดอย่างไรที่จะทำวิธีอื่น ๆ สตริงเป็น tm *?
Goaler444

7
ฉันรู้ว่ามันอาจจะสายไปหน่อยและคุณน่าจะคิดออกแล้วในตอนนี้ แต่คุณจะใช้strptimeฟังก์ชันนี้ทันเวลา hเพื่อแปลงจากchar *เป็นstruct tm
KingRadical

1
โปรดทราบว่า asctime () จะปล่อย \ n ไว้ท้ายสตริง
h7r

4
รหัสข้างต้นซ้ำซ้อน asctime (localtime (& rawtime)) เทียบเท่ากับการเรียกใช้ฟังก์ชัน ctime (& rawtime) ครั้งเดียว
duleshi

1
FYI - คุณไม่จำเป็นต้องวัตถุเป็นอาร์กิวเมนต์สำหรับtime_t time()วางNULL, 0ฯลฯ เป็นพารามิเตอร์ทำงานเพื่อกลับเวลาปัจจุบัน
Super Cat

69

เริ่มต้นnowตัวแปรของคุณ

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

localtimeฟังก์ชั่นใช้ในการแปลงค่าเวลาในการส่งผ่านtime_tไปstruct tmก็ไม่ได้จริงดึงเวลาของระบบ


36

ทางที่ง่าย:

#include <time.h>
#include <stdio.h>
#include <string.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
สิ่งนี้ต่อท้ายบรรทัดใหม่เพิ่มเติมในตอนท้าย
James Ko

2
จะไม่รวบรวมโดยไม่มี#include <string.h>
Deanie

16

เพื่อขยายคำตอบจาก @mingos ด้านบนฉันเขียนฟังก์ชันด้านล่างเพื่อจัดรูปแบบเวลาของฉันเป็นรูปแบบเฉพาะ ([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);
}

ข้อมูลเพิ่มเติมเกี่ยวกับstruct tmสามารถพบได้ที่นี่



7

พวกคุณสามารถใช้ฟังก์ชันนี้เพื่อรับเวลาท้องถิ่นปัจจุบัน หากคุณต้องการ gmtime ให้ใช้ฟังก์ชัน gmtime แทน localtime ไชโย

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

หากคุณต้องการเวลาโดยไม่มีวันที่

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

คุณช่วยอธิบายวิธีแก้ปัญหาของคุณโดยใช้ข้อความบริสุทธิ์ได้หรือไม่?
Magnilex

2
void main()int main(void)ควรจะเป็น
Keith Thompson

-9

พวกฉันมีวิธีใหม่ในการรับเวลาระบบ แม้ว่ามันจะยาวและเต็มไปด้วยงานโง่ ๆ แต่ด้วยวิธีนี้คุณจะได้รับเวลาของระบบในรูปแบบจำนวนเต็ม

#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 นั้นไม่น่าแปลกใจ แต่ถึงอย่างนั้นคุณก็ต้องการใช้มันอย่าออกไปใช้คำสั่งเชลล์และพยายามแยกวิเคราะห์ ดูหน้าคนสำหรับเวลาและ ctime และ rtc
Dana

18
นี่มันแย่มาก
Manuel Reis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.