2014-09-25 2 views
2

Мне было трудно решить это, возможно, кто-то может помочь или предоставить предложения. Так вот проблема. У меня есть месяц, день и год, хранящиеся как int. Я хочу иметь возможность добавлять фиксированное количество дней к дате и получать новую дату. Как мне это сделать?C++ Date Algorithm

+3

пожалуйста добавьте MCVE ТТП: //stackoverflow.com/help/mcve – Chantola

+0

Pls читать на библиотеки даты в Чет СТЛ –

+1

Начало здесь: http://en.cppreference.com/w/cpp/chrono/ c и здесь: http://en.cppreference.com/w/cpp/chrono –

ответ

1

Предположим, что вы делаете это для обучения (есть много библиотек дат там) ... какая у вас конкретная проблема? Алгоритм не очень сложный на самом деле и звучит как:

  1. добавить количество дней в day поле даты
  2. , если число дней в настоящее время больше, чем максимально допустимый (например, ваша дата как april 134, 2014), затем уменьшите количество дней с количеством дней месяца и увеличьте число месяца: например апреля в течение 30 дней, поэтому дата становится may 104 2014
  3. повторите шаг 2, пока количество дней не в порядке в течение месяца (june 73, july 43, august 12)

Хитрость в том, что

  1. в число дней февраля зависит от года со странным правилом (это 29, если year%4==0 && (year%100!=0 || year%400==0), 28 в противном случае).
  2. когда увеличивающиеся месяц вы можете получить в декабре прошлого года, в этом случае вернуться к январю, но увеличиваем год

Это не самый быстрый подход (требует, чтобы петля за несколько месяцев), но это не трудно воплощать в жизнь.

+0

Да, спасибо, это то, о чем я тоже думал. Я работал с time.h и не могу найти или использовать какие-либо функции, которые могли бы это сделать. Поэтому я думал, что так должно быть. Я попытаюсь посмотреть, смогу ли я заставить это работать. –

+1

Если вы используете '', проблема тривиальна. Функция 'mktime', заданная день/месяц/год, даст вам количество секунд с 1/1/1970: добавьте к ней количество дней раз 86400 (60 * 60 * 24 ... количество секунд в день), а затем вызовите 'localtime', чтобы преобразовать обратно в структуру с днем ​​/ месяцем/годом. – 6502

+0

Что, вы можете это сделать !? Это удивительно! :) Я только что закончил разработку вложенной логики, чтобы добавить дни, чтобы получить новую дату, как вы предложили, и она работает. Я попытаюсь сделать это так. Любые рекомендации на C++/C? –

0

Использование подталкивание date_time:

date d1(2014, 9, 25); 
date_duration dd(10); 
date d2 = d1 + dd; 

Это вычисляет дату 10 дней после того, как 25 сентября 2014 года я не думаю, что это становится лучше, чем это.