C语言 文件中时间与当前系统时间 时间差比较(比较结果返回为天数)最好是调用子函数解决

C语言 已知文件中内容格式为(姓名、地址、时间) 张三 广州市XX路 2017-9-21,文件中的时间是通过库<time.h>中的函数以指针方式(如 time_t now;
struct tm *tm_now;time(&now) ;tm_now=localtime(&now) ;
fprintf(f,"%s %s %s %d.%d.%d\n",xx.name,xx.address,1900+tm_now->tm_year,1+tm_now->tm_mon,tm_now->tm_mday))写入文件,现在需要读取文件中的每行记录的时间信息并和系统当前的时间进行比较,比较结果返回为天数。

第1个回答  2018-09-21
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int days(char* begin_time)   //格式: "20180914000000"  //2018-9-14 0点0分0秒 
{
struct tm tm1;
time_t time1,time_now;
sscanf(begin_time,"%4d%2d%2d%2d%2d%2d",&tm1.tm_year,&tm1.tm_mon,&tm1.tm_mday,&tm1.tm_hour,&tm1.tm_min,&tm1.tm_sec);
tm1.tm_year-=1900;
tm1.tm_mon--;
tm1.tm_isdst=-1;
time1=mktime(&tm1);  //构造time1 

time_now=time(NULL);
tm1=*(localtime(&time_now));      //当时日期
return (time_now-time1)/(3600*24); //返回相差天数 
}

int main()
{
char time_in_file[30]={"20180914000000\0"};
printf("\n%d",days(time_in_file));
return 0;
}

追问

可能您不清楚我的意思。我的意思是我已存在的文件里比如有学生的信息(名字,地址,入学日期),现在我要读取文件中学生的入学日期,然后跟目前的系统日期比较,入校多少天

追答

有点难度的就是日期比较, days函数就起到这个功能, 其它的从文件读取字符串, 截取入学日期, 这些自己写一下没什么问题吧

追问

char buf_time[40]为学生注册时间,int day 存放时间差,strftime(buf_time,40,"%Y-%m-%d %H:%M:%S", tn_now)后赋值给stu.buf_time并写入文件file.txt,判断其时间是否与上次的时间相隔超一年,代码如:if(compare(f1,stu1){ if(days(stu1.buf_time)<=365) print("截止今天该学生入学已%d天",day);fscanf(f1,"%s%s%s",stu1.name,stu1.address,stu1.buf_time}(这样调用发现day一直是一个固定的天数且大于365及时间乱码)else

追答

你能不能正确地从文件获取到学生的入学时间?

追问

不能,我通过fscanf(f1,"%s%s%s",stu1.name,stu1.address,stu1.buf_time)读取时,时间显示的是烫烫烫烫烫烫

追答

文件格式是怎么样的?