用time(NULL)返回值手动计算当前时间 (要考虑时区)

/*
*   用time(NULL)返回值 计算当前时间
*   @author 李政 <[email protected]>
*/
#include<stdio.h>
#include<time.h>
#include<stdbool.h>

int main()
{
    //定义一个数组每个月的天数
    char mon_arr[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 
    //用函数获取从1970年至今的总的秒数
    long sum_sec = time(NULL);
    char mon,day,hor,min,sec;
    short year=1970;

    //采用取余数的方法 计算现在的时间
    sec = sum_sec % 60;
    min = sum_sec / 60 %60;
    //位于东八区,比世界统一时间(零区时间)快8个小时
    hor = (sum_sec / 3600+8)%24;

    //算出总的天数
    long sum_day =(sum_sec/3600+8) / 24+1;

    while(sum_day >=365)
    {      
        //判断闰年然后 总的天数减去每年的天数
        if((year%4==0&&year%100!=0)||year%400==0)
        {
            sum_day -=366;
        }
        else
        {
            sum_day-=365;
        }
        year++;//每减去1年的天数 年要加1的
    }

    //判断闰年 确定二月分的天数
    if(year %4==0&&year%100!=0||year%400==0)
    {
       mon_arr[1]=29;
    }

    //用剩余的天数减去每个月的天数
    for(mon =1 ;mon<13;mon++)  //mon++判断错误然后返回的就是这个月
    {
        if(sum_day>mon_arr[mon-1])
        {
            sum_day -= mon_arr[mon-1];
        }
        else
        {
            day =sum_day;  //这是剩余的天数
            break;
        }
    }

    printf("%hd年%hhd月%hhd日%hhd:%hhd:%hhd\n",year,mon,day,hor,min,sec);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42205987/article/details/82084753