计算从1970年1月1日0时开始,到某个时间点所经历的秒数

#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;
}







你可能感兴趣的:(计算从1970年1月1日0时开始,到某个时间点所经历的秒数)