Я ищу алгоритм, чтобы найти дату дня в будущем, которая находится в N днях с сегодняшнего дня.
Моя основная проблема заключается в том, как справляться с високосными годами в середине.
Я ищу алгоритм, чтобы найти дату дня в будущем, которая находится в N днях с сегодняшнего дня.
Моя основная проблема заключается в том, как справляться с високосными годами в середине.
Если я правильно ответю на ваш вопрос, ваш лучший вариант - сделать следующее:
Вы можете сделать это, используя номер юлианского дня для даты.
Дополнительную информацию см. в статье в Википедии о номере Юлианского дня (JDN).
Сказав, что, если вы на самом деле используете современный язык программирования, у большинства есть возможности иметь дело с датами, такими как Java, С#/. NET, Python и т.д.
Это сильно зависит от того, какой язык и рамки вы используете для своей разработки, поскольку большинство структур имеют какой-то способ справиться с этим. Например, в .NET это очень просто:
DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);
Вот код ruby, который используется в http://reqr.net/cal для расчета смещений дня: https://gist.github.com/910427
Сам алгоритм является агностиком языка и использует только примитивные типы.
Секунды - ваш друг. Псевдокод для любого языка, который вы используете:
seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)
Transact-SQL (MS SQL Server) предлагает функцию DATEADD. Например:
DECLARE @days int;
DECLARE @datetime datetime;
SET @days = 365;
SET @datetime = '2000-01-01 01:01:01.111'; /* 2000 was a leap year */
SELECT DATEADD(day, @days, @datetime);
--RESULT: 2000-12-31 01:01:01.110
Поскольку вы ищете решение C, проверьте, не ctime.h не соответствует вашим потребностям, прежде чем переопределять все самостоятельно.
см
Арифметика в календарных датах на C или С++ (добавьте N дней к указанной дате)
https://en.wikipedia.org/wiki/C_date_and_time_functions