如何在C程序中获取date和时间值
我有这样的东西:
char *current_day, *current_time; system("date +%F"); system("date +%T");
它在stdout中输出当前的date和时间,但是我想要得到这个输出或者将它们赋值给current_day
和current_time
variables,以便稍后可以对这些值进行一些处理。
current_day ==> current day current_time ==> current time
我现在能想到的唯一解决scheme是将输出指向某个文件,然后读取该文件,然后将date和时间的值分配给current_day
和current_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来获取详细信息