gpt4 book ai didi

c - C中两个日期之间的差异

转载 作者:IT王子 更新时间:2023-10-29 00:55:01 24 4
gpt4 key购买 nike

我试图通过使用以下 C 代码来获取两个日期之间的差异。

但代码总是给出差异 0。帮助我找出我犯错误的地方。

我在linux下使用gcc编译器。

#include <stdio.h>  
#include <time.h>
int main ()
{
struct tm start_date;
struct tm end_date;
time_t start_time, end_time;
double seconds;

start_date.tm_hour = 0; start_date.tm_min = 0; start_date.tm_sec = 0;
start_date.tm_mon = 10; start_date.tm_mday = 15; start_date.tm_year = 2013;

end_date.tm_hour = 0; end_date.tm_min = 0; end_date.tm_sec = 0;
end_date.tm_mon = 10; end_date.tm_mday = 20; end_date.tm_year = 2013;

start_time = mktime(&start_date);
end_time = mktime(&end_date);

seconds = difftime(end_time, start_time);

printf ("%.f seconds difference\n", seconds);

return 0;
}

编辑:@qchen 回答对解决我的问题很有帮助。还有一个疑问。以下是我的更新。来自回答

  start_date.tm_hour = 0;  start_date.tm_min = 0;  start_date.tm_sec = 0;
start_date.tm_mon = 10-1; start_date.tm_mday = 18; start_date.tm_year = 2013-1876;

end_date.tm_hour = 0; end_date.tm_min = 0; end_date.tm_sec = 0;
end_date.tm_mon = 10-1; end_date.tm_mday = 20; end_date.tm_year = 2013-1876;

tm_year 是自 1900 年以来的年份,那么如果我将 1876 替换为 1876 到 2012 之间的年份,为什么我会得到正确的输出。

最佳答案

问题是 tm_year 是自 1900 年以来的年份,因此 2013 年将是 113 http://en.cppreference.com/w/cpp/chrono/c/tm

  start_date.tm_hour = 0;  start_date.tm_min = 0;  start_date.tm_sec = 0;
start_date.tm_mon = 10; start_date.tm_mday = 15; start_date.tm_year = 113;

end_date.tm_hour = 0; end_date.tm_min = 0; end_date.tm_sec = 0;
end_date.tm_mon = 10; end_date.tm_mday = 20; end_date.tm_year = 113;

鉴于 2013 年,mktime 将返回 -1,因为无法表示日历时间。你会认为 3913 年是一个有效的日历时间,原因与 the year 2038 problem 有关。 , 正如 Joni 所指出的

关于c - C中两个日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com