但是我不知道如何在我的c程序中使用能够产生正确答案的状态嵌套...
答案 0 :(得分:13)
将它们转换为UNIX纪元时间并减去差异。
UNIX纪元时间是1970年1月1日00:00:00.0之后的日期总秒数
一旦你得到了秒数,就把这个差异除以一天中的秒数( 24小时* 60分钟* 60秒= 86400秒)。
答案 1 :(得分:2)
我会在Julian day转换两个日期,然后做差异,但我必须检查这是否是一个没有缺点的好解决方案。我建议你也这样做。
答案 2 :(得分:2)
找到一个将日期转换为“自某个时代以来的天数”的库(通常称为朱利安日) - 尽管有天文Julian Date的官方规则,{{3 }})。然后将每个日期转换为相关的数字,并采取差异。假设图书馆处理闰年,你的答案也是如此。
有关一组此类代码的提示,请参阅“Modified Julian Date”。
答案 3 :(得分:1)
答案 4 :(得分:1)
伪代码1:
if year modulo 400 is 0 then leap
else if year modulo 100 is 0 then no_leap
else if year modulo 4 is 0 then leap
else no_leap
伪代码2:
function isLeapYear (year):
if ((year modulo 4 is 0) and (year modulo 100 is not 0)) or (year modulo 400 is 0)
then true
else false
答案 5 :(得分:1)
#include <time.h>
#define SECONDS_PER_DAY (24 * 60 * 60)
time_t time_from_date(int year, unsigned month, unsigned day)
{
return mktime(&(struct tm){
.tm_year = year - 1900, .tm_mon = month - 1, .tm_mday = day });
}
int days_between(int year0, unsigned month0, unsigned day0,
int year1, unsigned month1, unsigned day1)
{
return difftime(time_from_date(year1, month1, day1),
time_from_date(year0, month0, day0)) / SECONDS_PER_DAY;
}
答案 6 :(得分:0)
您根本不需要嵌套条件。
提示:不要试图确定某一年是否是闰年,而是要确定它之前的闰日总数。