如何在C程序中获取date和时间值

我有这样的东西:

char *current_day, *current_time; system("date +%F"); system("date +%T"); 

它在stdout中输出当前的date和时间,但是我想要得到这个输出或者将它们赋值给current_daycurrent_timevariables,以便稍后可以对这些值进行一些处理。

 current_day ==> current day current_time ==> current time 

我现在能想到的唯一解决scheme是将输出指向某个文件,然后读取该文件,然后将date和时间的值分配给current_daycurrent_time 。 但我认为这不是一个好方法。 还有其他简短而优雅的方式吗?

使用time()localtime()来获得时间:

 #include <time.h> time_t t = time(NULL); struct tm tm = *localtime(&t); printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); 
 time_t rawtime; time ( &rawtime ); struct tm *timeinfo = localtime ( &rawtime ); 

您也可以使用strftime将时间格式化为string。

strftime (C89)

马丁提到它 ,这里是一个例子:

 #include <stdio.h> #include <time.h> int main() { time_t t = time(NULL); struct tm *tm = localtime(&t); char s[64]; strftime(s, sizeof(s), "%c", tm); printf("%s\n", s); } 

示例输出:

 Thu Apr 14 22:39:03 2016 

%c说明符产生与ctime相同的格式。

这个函数的一个优点是它返回写入的字节数,在生成的string太长的情况下允许更好的错误控制。

asctime和ctime (C89)

asctime是格式化struct tm一种便捷方式:

 #include <stdio.h> #include <time.h> int main() { time_t t = time(NULL); struct tm *tm = localtime(&t); printf("%s\n", asctime(tm)); } 

其中产生一个固定的输出格式,如:

 Wed Jun 10 16:10:32 2015 

而且标准所说的ctime()也是一个捷径:

 asctime(localtime()) 

正如乔纳森·莱弗勒(Jonathan Leffler)所提到的 ,格式有缺乏时区信息的缺点。

POSIX 7将这些function标记为“过时”,因此可以在未来的版本中将其删除:

标准开发人员决定将asctime()和asctime_r()函数标记为过时,即使由于缓冲区溢出的可能性,asctime()处于ISO C标准。 ISO C标准还提供了可用于避免这些问题的strftime()函数。

这个问题的C + +版本: 如何获取C + +的当前时间和date?

上面给出的答案都是很好的CRT答案,但是如果你想要的话,你也可以使用Win32解决scheme来做到这一点。 这几乎是相同的,但IMO如果你是Windows编程,你可能只是使用它的API(不知道如果你是在Windows编程实际上,但不pipe)

 char* arrDayNames[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // Jeez I hope this works, I haven't done this in ages and it's hard without a compiler.. SYSTEMTIME st; GetLocalTime(&st); // Alternatively use GetSystemTime for the UTC version of the time printf("The current date and time are: %d/%d/%d %d:%d:%d:%d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); printf("The day is: %s", arrDayNames[st.wDayOfWeek]); 

无论如何,这是你的Windows解决scheme。 希望这会对你有所帮助!

而不是文件使用pipe道,如果你wana使用C而不是C ++你可以像这样使用popen

 #include<stdlib.h> #include<stdio.h> FILE *fp= popen("date +F","r"); 

并使用* fp作为正常的文件指针与fgets和所有

如果您使用c ++string,请fork一个子项,然后调用该命令,然后将其传递给父项。

  #include <stdlib.h> #include <iostream> #include <string> using namespace std; string currentday; int dependPipe[2]; pipe(dependPipe);// make the pipe if(fork()){//parent dup2(dependPipe[0],0);//convert parent's std input to pipe's output close(dependPipe[1]); getline(cin,currentday); } else {//child dup2(dependPipe[1],1);//convert child's std output to pipe's input close(dependPipe[0]); system("date +%F"); } 

//为date + T做一个类似的1,但是我真的推荐你用time.h中的东西

您可以通过使用C中的预定义macros来获取当前的date和时间
date 时间也可以通过其他方式查找当前date。 c-forbeginners.blogspot.in来获取详细信息