#include#include #include #include #define IN #define OUT //比较周数,成功返回0-6的数,错误返回7 //p代表周数,取周数前3个字母,如Mon代表周1,以此类推 //改动周几不影响返回的时间值,可以通过改动日期的日数来达到修改时间 int weekcmp( IN char *p) { char week[8][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; int i; for(i=0;i<7;i++) if(strcmp(p,week[i])==0) break; if(i==7) { printf("fail to find week.\n"); return i; } return i; } //比较月份,成功返回0-11的数,错误返回12 //P 为月份的前三个字母,如Feb代表二月,以此类推 int monthcmp( IN char *p) { char month[13][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; int i; for(i=0;i<12;i++) if(strcmp(p,month[i])==0) break; if(i==12) { printf("fail to find month.\n"); return i; } return i; } //将字串格式的时间转换为结构体,返回距离1970年1月1日0:0:0的秒数,当字符串格式错误或超值时返回0 //BUF 为类似Tue May 15 14:46:02 2007格式的,p为时间结构体 time_t timeconvert(IN char *buf,OUT struct tm *p) { char cweek[4]; char cmonth[4]; time_t second; sscanf(buf,"%s %s %d %d:%d:%d %d",cweek,cmonth,&(p->tm_mday),&(p->tm_hour),&(p->tm_min),&(p->tm_sec),&(p->tm_year)); p->tm_year-=1900; printf("****%s,%s*****\n",cweek,cmonth); p->tm_mon=monthcmp(cmonth); //改动周几不影响返回的时间值,可以通过改动日期的日数来达到修改时间 p->tm_wday=weekcmp(cweek); if(p->tm_mon==12&&p->tm_wday==7) { printf("monthcmp() or weekcmp() fail to use.\n"); return 0; } return second=mktime(p); } int main() { long second; char buf[]="Fri Jan 16 15:46:02 2007"; struct tm time1; second = timeconvert(buf,&time1); printf("year:%d, month:%02d, day:%02d\n",time1.tm_year+1900,time1.tm_mon+1,time1.tm_mday); printf("second=%d\n",second); return 0; }