编辑代码

#include<stdio.h>
#include<string.h>
 
typedef unsigned int time_t;

typedef struct tm{

    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
}tm;

const char Days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


void locatime(time_t time,struct tm *t)
{

    unsigned int pass4year;
    int hours_pre_year;

    if(time<0)time=0;

    t->tm_sec = (int)(time % 60);
    time /=60;
    
    t->tm_min = (int)(time % 60);
    time /=60;

    pass4year = (unsigned int)time/(1461L * 24L);
    
    t->tm_year = (pass4year<<2) + 1970;

    time %= 1461L * 24L;

    for(;;)
    {
        hours_pre_year = 365*24;

        if((t->tm_year & 3) == 0)
        {

            hours_pre_year += 24;
        }
        if(time<hours_pre_year)
        {

            break;
        }
        t->tm_year++;
        time -= hours_pre_year;


    }
    t->tm_hour = (int)(time % 24);
    time /= 24;
    time++;
    if((t->tm_year & 3) == 0)
    {

        if(time>60){

            time--;
        }
    else {

        if(time == 60)
        {

            t->tm_mon = 1;
            t->tm_mday = 29;
            return;
        }
    }
}
for(t->tm_mon;Days[t->tm_mon]<time;t->tm_mon++)
{

    time -= Days[t->tm_mon];
}
   t->tm_mday = (int)(time);
   return;
}

static time_t mon_yday[2][12] = 
{

    {0,31,59,90,120,151,181,212,243,273,304,334},
    {0,31,60,91,121,152,182,213,244,274,305,335}
};

int isleap(int year)
{
    return (year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 ==0);
}


time_t mktime(struct tm dt)
{
    time_t result;
    int i = 0;
    result = (dt.tm_year - 1970) * 365 * 24 * 3600 +
    (mon_yday[isleap(dt.tm_year)][dt.tm_mon-1] + dt.tm_mday - 1) * 24 * 3600 +
    dt.tm_hour * 3600 + dt.tm_mday * 60 + dt.tm_sec;

    for(i = 1970;i<dt.tm_year;i++)
    {

        if(isleap(i))
        {

            result += 24*3600;
        }
    }
    return (result);
}


void main()
{

   time_t time;
   time_t time2;
   long i = 0;
   static tm t;
   time = 1514768461;
   for(i = 0;i<(4*365+1);i++)
   {

       locatime(time,&t);
       printf("A time:%d\r\n",time);
       printf("A %04d-%02d-%02d %02d:%02d:%02d\r\n",t.tm_year,t.tm_mon+1,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec);

       t.tm_mon++;
       time2 = mktime(t);
    /*
       t.tm_mon+=1;   
    time2 = mktime(t); 
    printf("B time:%d\r\n",time2);
    memset((void*)&t,0x00,sizeof(t));
    localtime(time2,&t);
    printf("B %04d-%02d-%02d %02d:%02d:%02d\r\n",t.tm_year,t.tm_mon+1,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec);
    memset((void*)&t,0x00,sizeof(t));
    time += 24*3600;*/
   }
   printf("over");
   return;
}