一直以为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);
}