[英]Time.h Providing Incorrect Answer in C
我有一个日期数组,当前是{2010、5、13、2010、5、15}等格式的整数。 我正在尝试使用time.h库来查找每个日期之间的天数差异。 以下代码描述了问题所在:
int main()
{
int dates[] = {2010, 4, 14, 2010, 4, 15, 2010, 4, 16};
int* pDates = dates;
printf("%d\n", subtractDates(1, pDates));
return 0;
}
int subtractDates(int i, int* pDates)
{
struct tm start_date;
struct tm end_date;
time_t start_time, end_time;
start_date.tm_hour = 0;
start_date.tm_min = 0;
start_date.tm_sec = 0;
start_date.tm_mon = *(pDates+1)-1;
start_date.tm_mday = *(pDates+2);
start_date.tm_year = *(pDates)-1900;
end_date.tm_hour = 0;
end_date.tm_min = 0;
end_date.tm_sec = 0;
end_date.tm_mon = *(pDates+1+i*3)-1;
end_date.tm_mday = *(pDates+2+i*3);
end_date.tm_year = *(pDates+i*3)-1900;
start_time = mktime(&start_date);
end_time = mktime(&end_date);
return difftime(end_time, start_time) / 86400;
}
此代码打印出来的日期之间的差是1天,这是正确的。 但是,如果我删除数组中的第三个日期,如下所示,则打印值将变为0,我认为这是不正确的。
int main()
{
int dates[] = {2010, 4, 14, 2010, 4, 15};
int* pDates = dates;
printf("%d\n", subtractDates(1, pDates));
return 0;
}
int subtractDates(int i, int* pDates)
{
struct tm start_date;
struct tm end_date;
time_t start_time, end_time;
start_date.tm_hour = 0;
start_date.tm_min = 0;
start_date.tm_sec = 0;
start_date.tm_mon = *(pDates+1)-1;
start_date.tm_mday = *(pDates+2);
start_date.tm_year = *(pDates)-1900;
end_date.tm_hour = 0;
end_date.tm_min = 0;
end_date.tm_sec = 0;
end_date.tm_mon = *(pDates+1+i*3)-1;
end_date.tm_mday = *(pDates+2+i*3);
end_date.tm_year = *(pDates+i*3)-1900;
start_time = mktime(&start_date);
end_time = mktime(&end_date);
return difftime(end_time, start_time) / 86400;
}
考虑到我所做的就是删除数组中的三个值,而我在第一个程序中甚至没有使用这三个值,我只是不明白为什么它返回0。 任何帮助,将不胜感激,谢谢。
我遇到的问题是我正在分配和返回双精度整数。 通过仅对此进行修改,我就能使我的代码生效。 感谢所有提供帮助的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.