根据基准时间的毫秒数获取现在的时间

147 阅读1分钟
int baseYear = 1970;
int baseMon = 1;
int baseDay = 1;
int baseHour = 0;
int baseMin = 0;
int baseSec = 0;
int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
//判闰年
inline int leap(unsigned year)
{
    return (year%4==0&&year%100!=0)||year%400==0;
}
//天数偏移转日期
void int2date(unsigned a,unsigned *year,unsigned *month,unsigned *day)
{
    *year = a/146097*400 + baseYear;
    for(a%=146097; a>=365+leap(*year); a-=365+leap(*year),(*year)++);
    days[1] += leap(*year);
    for(*month=1; a>=days[*month-1]; a-=days[*month-1],(*month)++);
    days[1]=28;
    *day=a+1;
}
void timestamp(unsigned n)
{
    unsigned year,mon,day,hour,min,sec = (baseSec+n%60)%60;
    n = n/60+(baseSec+n%60)/60;
    min = (baseMin+n%60)%60;
    n = n/60+(baseMin+n%60)/60;
    hour = (baseHour+n%24)%24;
    n = n/24+(baseHour+n%24)/24;
    int2date(n,&year,&mon,&day);
    printf("%u-%u-%u %u:%02u:%02u\n",year,mon,day,hour,min,sec);
}


很好用,\