【转】c语言时间转换,字符串转秒或时间结构体
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#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;}