#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;
}
Published in C
Tags: , ,

No Responses to “c语言时间转换,字符串转秒或时间结构体”

Leave a Reply

请输入算式结果(看不清请点击图片)
(必须)