[C ++]用于将日期添加到抽象日期的算法,例如。有13个月的一年,第13个月有40天

时间:2016-06-01 20:08:39

标签: c++ algorithm date

我有一个扭曲的任务,我不知道从哪里开始。我需要编写一个函数,它会在给定日期(dd / mm / yyyy)中添加天数,并在结果中返回日期,但问题是,年份不一定需要格鲁吉亚,例如。它可以有13个月,其中第13个月有40天。我不需要代码,我需要某种算法来知道,从哪里开始。我试图使用Julian Day Number,但我无法根据自己的需要对其进行编辑。如果有人有任何建议,他们将不胜感激。我不能使用像time_t

这样的包装器

3 个答案:

答案 0 :(得分:1)

您可以编写2个函数:

int DateToDay(const Date& date);
Date DayToDate(int day);

哪会将日期转换为自00/00/00以来的日期并返回到您的日历中(这很简单,可以用通用公式表示 - 您需要知道每年的月份,以及每个月定义的日期日历+闰年的一些逻辑)。之后,您可以通过

添加日期
Date result_date = DayToDate(DateToDay(start_date)+days_to_add);

答案 1 :(得分:0)

首先,考虑存储描述日历的信息的好方法,即如何存储一年中的monthes数和每月的天数。找到问题的答案:是否有闰年,与非飞跃有什么不同?

然后,设计所需操作的逻辑,如 http://alcor.concordia.ca/~gpkatch/gdate-algorithm.html 但具有你的特异性

答案 2 :(得分:0)

在最基本的形式中,年份都具有相同的天数,并且每个月也有指定的天数。因此,例如,i个月有d_i天,一年有n个月。我们可以将其视为一个表格:

month | 1 | 2 | 3 | ... | n
days  | d1| d2| d3| ... | dn

这一年将有d1+d2+d3+...+dn天。

现在,如前所述,将日期(dd/mm/yyyy)转换为天数的算法只是使用上表来获取自某个日期以来经过的天数,例如,自01/01/1000。

number of days in whole years = (yyyy - 1000) * days_in_year
number of days in whole months = sum(d_i) for all i < mm
number of days in current month = dd
total number of days = sum of the three numbers you get above

反之亦然,您有自该特定日期以来经过的天数(d),并且您希望从中获取日历日期,因此您需要找到:< / p>

how many years have passed = floor(d / days_in_year)
yyyy = 1000 + how_many_years_have_passed

等等mmdd

如果您还想考虑闰年,您只需要稍微调整算法以考虑闰年的逻辑。例如,如果闰年每5年发生一次,那么您需要找出在1000yyyy之间有多少闰年,并为每个闰年增加一天。此外,您需要告诉反向算法哪个月将在闰年中有额外的一天。

格里高利历中的闰年有一个非常奇怪的模式:它们每四年发生一次(如果年份可以被4整除,那就是闰年),但如果年份可以被100整除则不会。但是,如果年份是可以被400整除,那么它是闰年。因此,您可能需要考虑算法中的复杂情况。