在C中获取当前时间


97

我想获取系统的当前时间。为此,我在C中使用以下代码:

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

问题在于此代码给出了一些随机时间。另外,随机时间每次都不同。我想要系统的当前时间。


Answers:


126

此处复制粘贴:

/* 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”添加到main()参数列表中即可使其在C中工作)


知道如何反过来做吗?字符串到tm *?
Goaler444

6
我知道可能已经晚了,您现在可能已经知道了,但是您可以使用time.hstrptime函数从转换为char *struct tm
KingRadical

1
请注意,asctime()将在字符串的末尾保留一个\ n。
h7r 2014年

4
上面的代码是多余的。asctime(localtime(&rawtime))等效于单个ctime(&rawtime)函数调用。
duleshi 2014年

1
仅供参考-你并不需要一个time_t对象作为参数time()。将NULL0等作为参数可以返回当前时间。
超级猫

68

初始化now变量。

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

localtime函数用于将传递的时间值转换time_tstruct tm,它实际上并不检索系统时间。


35

简单的方法:

#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
这将在末尾附加一个额外的换行符。
James Ko

不会编译没有#include <string.h>
叶德娴

13

为了扩展上述@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参见此处


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

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

6

伙计们,您可以使用此功能来获取当前本地时间。如果要使用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)
基思·汤普森

-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中的时间库和系统调用并不令人吃惊,但是即使如此,您仍要使用它们,而不是使用shell命令并尝试对其进行解析。有关时间,ctime和rtc,请参见手册页。
Dana 2014年

18
这真糟糕。
曼努埃尔·里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.