鉴于两个日期,计算闰年这两个日期之间的天数的最佳方法是什么。
例如,如果d1 = 12/1/2007且d2 = 1/31/2008,那么d1和d2之间的总天数将为62,而闰年中的天数将为31。 / p>
另一个例子是如果d1 = 12/1/2007且d2 = 6/30/2012,那么d1和d2之间的总天数将是1674,而闰年中的天数将是548。
我已经有计算特定年份是否为闰年的函数,以及计算两个日期之间天数的函数。
如果有人在Delphi(Pascal)或C / C ++ / C#中有这样的算法,我将不胜感激。任何建议和帮助都会很棒。
答案 0 :(得分:1)
解决方案是在python中,并且转换为任何其他语言都不难。
def isLeapYear(year):
if year%4 == 0:
if year%100 == 0:
if year%400 == 0:
return True
else:
return False
else:
return True
else:
return False
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
cumDays = [0,31,59,90,120,151,181,212,243,273,304,334] #cumulative Days by month
leapcumDays = [0,31,60,91,121,152,182,213,244,274,305,335] # Cumulative Days by month for leap year
totdays = 0
if year1 == year2:
if isLeapYear(year1):
return (leapcumDays[month2-1] + day2) - (leapcumDays[month1-1] + day1)
else:
return (cumDays[month2-1] + day2) - (cumDays[month1-1] + day1)
if isLeapYear(year1):
totdays = totdays + 366 - (leapcumDays[month1-1] + day1)
else:
totdays = totdays + 365 - (cumDays[month1-1] + day1)
year = year1 + 1
while year < year2:
if isLeapYear(year):
totdays = totdays + 366
else:
totdays = totdays + 365
year = year + 1
if isLeapYear(year2):
totdays = totdays + (leapcumDays[month2-1] + day2)
else:
totdays = totdays + (cumDays[month2-1] + day2)
return totdays
答案 1 :(得分:0)
一种天真的方法是:
检查您的开始年份。如果是闰年,请计算从当天到12月31日(含)的天数。如果没有,直到您的起始年份等于结束年份,将年份增加1.然后,检查年份。如果是闰年,则开始计算天数,如果不是增加年份。一旦当前年份和结束年份相同,则检查当前(==结束)年份是否为闰年。如果是,则计算从1月到结束月份的月数,否则会中断算法。一旦您的当月是结束月份,请计算您的日期。
答案 2 :(得分:0)
这是我的伪代码版本,使用您的函数 - is_leap_year, days_between
。正如评论者所指出的,这些是正确编写的棘手功能。
int leap_year_days_between(Date d1, Date d2) {
if (d1.year == d2.year) {
if (is_leap_year(d1.year) { return days_between(d1,d2); }
else { return 0; }
}
else {
Date last_day_in_year(12, 31, d1.year);
int count=0;
Date tmp = d1;
while (tmp.year < d2.year) {
if ( is_leap_year(tmp.year) ) {
count += days_between(tmp,last_day_in_year);
}
tmp = (1, 1, tmp.year+1);
}
if ( is_leap_year(d2.year) ) {
count += days_between(tmp, d2);
}
}
}