#define MINUTE 60 //一分钟的秒数
#define HOUR (MINUTE*60) //一小时的秒数
#define DAY (HOUR*24) //一天的秒数
#define YEAR (DAY*365) //一年的秒数
static int month[12]={
0,
DAY*(31)
long mktime(struct tm *tm)
{
long res;
int year;
year=tm->tm_year-1970;
//这些年经过的秒数时间+每个闰年多一天(距1970年最近的闰年是1972年,且每四年一个闰年,这样多算了像2100这样的年了)
res=YEAR*year+DAY*((year+1)/4)
//判断当前年是否是闰年
if((tm->tm_year%4==0&&year%100!=0)||year%400==0)
if(tm->tm_mon>1)//是闰年的话,判断月是否大于1月(实际中的2月)(从0月开始,到11月)
res+=DAY;
//判断从1970年到这一年,这一时间段中有多少个能被100整除,但不能被400整除的年
if(tm->tm_year>2100) //第一个这样的数是2100
res-=((tm->tm_year-2001)/100)*DAY;
//以上代码都是判断一年到底是365天,还是366天。是从年的角度判断是否该加一。
res+=month[tm->tm_mon]; // 加上当月时的秒数
res+=DAY*(tm->tm_mday-1); // 加上当前天过去的天数秒数
res+=HOUR*tm->tm_hour;//加上当天过去的小时秒数
res+=MINUTE*tm->tm_min;//加上当天过去的分钟秒数
res+=tm->tm_sec; //加上当天过去的秒数秒数
return res;
}
转载于:https://my.oschina.net/935572630/blog/368824