部分代码说明:
一、Unix/Linux系统下的一种时间结构: 1、time_t 类型:长整型,一般用来表示从1970-01-01 00:00:00时以来的秒数,精确度:秒; 由函数time()获取;该类型定义在头文件 /usr/include/sys/time.h 中。
2、struct tm 结构:由函数gmtime()解析time_t得到 struct tm*gmtime(const time_t*timep); 函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后 将结果由结构tm返回。 结构tm的定义为 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒 int tm_min 代表目前分数,范围0-59 int tm_hour 从午夜算起的时数,范围为0-23 int tm_mday 目前月份的日数,范围01-31 int tm_mon 代表目前月份,从一月算起,范围从0-11 int tm_year 从1900 年算起至今的年数 int tm_wday 一星期的日数,从星期一算起,范围为0-6 int tm_yday 从今年1月1日算起至今的天数,范围为0-365 int tm_isdst 日光节约时间的旗标 此函数返回的时间日期未经时区转换,而是UTC时间。
3、localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间 。
一个实例:
void StoreEvent(char *str) { long tt; struct tm *vtm; int i; char Etime[100]; char filename[20]; char dirname[20]; char path[100]; getcwd(path, sizeof(path)); //获取当前路径 time( &tt ); //获取当前时间 vtm = localtime( &tt ); //转换为日历时间 sprintf(Etime,"%d-%02d-%02d %02d:%02d:%02d ",vtm->tm_year+1900,vtm->tm_mon+1,vtm->tm_mday,vtm->tm_hour,vtm->tm_min,vtm->tm_sec); sprintf(filename,"/%d%02d%02d.txt",vtm->tm_year+1900,vtm->tm_mon+1,vtm->tm_mday); sprintf(dirname,"/%d%02d",vtm->tm_year+1900,vtm->tm_mon+1); strcat(path,dirname); if(access(path,0)==-1) //access函数是查看文件是不是存在 { if (mkdir(path,0777)) //如果不存在就用mkdir函数来创建 { printf("creat file bag failed!!!\n"); } }
strcat(path,filename); FILE *fp; fp = fopen(path,"ar+"); if(fp == NULL) { printf("文件异常。\n"); return; } lseek(fp,0,SEEK_END); //将读写位置移到文件尾 strcat(Etime,str); fputs(Etime,fp); fflush(fp); fsync(fileno(fp)); //同步缓存 fclose(fp); }
程序运行后会在当前目录以“年月”为名创建一个文件夹,并在该文件夹下以“年月日”为名创建一个txt文档,文档内容实例如下:
2019-02-18 11:10:21 开机。 2019-02-18 11:10:46 开启风机。 2019-02-18 11:11:26 开启风机。 2019-02-18 12:02:07 开机。 2019-02-18 14:43:17 开机。