c语言实现系统当前时间,发现差了8个小时

一直以为time(NULL)返回的是1970-01-01 00:00:00到当前时间的秒数。

发现不是从0点0分0秒算起的。

学C语言5个月,不知道是我算法有问题还是真就是这样。求大佬指出。

我用以语言实现 发现和实际差了8个小时。以下是代码:

#include <stdio.h>
#include <time.h>
struct tme{
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_day;
    int tm_mon;
    int tm_year;
};

void t_func(int sum_sec,struct tme *data){
    int sec = sum_sec%86400;     //一天86400秒。
    data->tm_hour = sec/3600;
    data->tm_min = (sec%3600)/60;
    data->tm_sec = (sec%3600)%60;
}

void leap_year(struct tme *data){
    switch(data->tm_mon){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
        if(data->tm_day<31){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 2:
        if(data->tm_day < 29){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        if(data->tm_day < 30){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 12:
        if(data->tm_day < 31){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon = 1;
            data->tm_year +=1;
        }
        break;
    default:
        break;
    }
}

void ordinary_year(struct tme *data){
    switch(data->tm_mon){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
        if(data->tm_day<31){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 2:
        if(data->tm_day < 28){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        if(data->tm_day < 30){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon +=1;
        }
        break;
    case 12:
        if(data->tm_day < 31){
            data->tm_day++;
        } else {
            data->tm_day = 1;
            data->tm_mon = 1;
            data->tm_year +=1;
        }
        break;
    default:
        break;
    }


}

int main()
{
    unsigned long sum_days;
    time_t sum_sec;

    struct tme data={
        .tm_sec = 0,
        .tm_min = 0,
        .tm_hour = 0,
        .tm_day = 1,
        .tm_mon = 1,
        .tm_year = 1970,
    };
    sum_sec = time(NULL);
    sum_sec = sum_sec + 28800;     //距离1970-01-01 00:00:00还差8个小时(28800秒)    
    sum_days = sum_sec/86400;

    while(sum_days--){
        if(data.tm_year%400 == 0||(data.tm_year%4 == 0&&data.tm_year%100 != 0)){
                leap_year(&data);
        } else {
                ordinary_year(&data);
        }
    }
    t_func(sum_sec,&data);
    printf("现在的时间是%d-%d-%d %d:%d:%d\n",data.tm_year,data.tm_mon,data.tm_day,data.tm_hour,data.tm_min,data.tm_sec);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值