Найти дату в 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 не соответствует вашим потребностям, прежде чем переопределять все самостоятельно.
Ответ 7
см
Арифметика в календарных датах на C или С++ (добавьте N дней к указанной дате)
https://en.wikipedia.org/wiki/C_date_and_time_functions
http://www.cplusplus.com/reference/ctime/
http://en.cppreference.com/w/c/chrono