Найти дату за N дней - PullRequest
       0

Найти дату за N дней

1 голос
/ 08 апреля 2011

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

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

Ответы [ 7 ]

4 голосов
/ 08 апреля 2011

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

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

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

См. Статью Википедии о номере дня Юлиана (JDN) для получения дополнительной информации.

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

1 голос
/ 08 апреля 2011

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

DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);
0 голосов
/ 08 апреля 2011

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

0 голосов
/ 08 апреля 2011

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

0 голосов
/ 08 апреля 2011

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

seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)

0 голосов
/ 08 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...