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);
}
转载:
https://blog.csdn.net/qq_25367755/article/details/51221937