Найти дату в N днях

Я ищу алгоритм, чтобы найти дату дня в будущем, которая находится в N днях с сегодняшнего дня.

Моя основная проблема заключается в том, как справляться с високосными годами в середине.

Ответ 1

Если я правильно ответю на ваш вопрос, ваш лучший вариант - сделать следующее:

  • Преобразование даты в число, где число означает количество дней с определенной даты.
  • Добавьте N к этому номеру
  • Преобразование результатов обратно в дату

Вы можете сделать это, используя номер юлианского дня для даты.

Дополнительную информацию см. в статье в Википедии о номере Юлианского дня (JDN).

Сказав, что, если вы на самом деле используете современный язык программирования, у большинства есть возможности иметь дело с датами, такими как Java, С#/. NET, Python и т.д.

Ответ 2

Это сильно зависит от того, какой язык и рамки вы используете для своей разработки, поскольку большинство структур имеют какой-то способ справиться с этим. Например, в .NET это очень просто:

DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);

Ответ 3

Вот код ruby, который используется в http://reqr.net/cal для расчета смещений дня: https://gist.github.com/910427

Сам алгоритм является агностиком языка и использует только примитивные типы.

Ответ 4

Секунды - ваш друг. Псевдокод для любого языка, который вы используете:

seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)

Ответ 5

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

Ответ 6

Поскольку вы ищете решение C, проверьте, не ctime.h не соответствует вашим потребностям, прежде чем переопределять все самостоятельно.