Рассчитать период времени с помощью C - PullRequest
0 голосов
/ 29 ноября 2008

Как рассчитать период времени между двумя датами в C (любая библиотека и т. Д.)?

Программа должна принять две (локальные) даты в качестве входных данных и указать период продолжительности между ними в качестве выходных данных.

Например,

startDate = OCT-09-1976 and endDate = OCT-09-2008 
should show a duration of 32 years. 

startDate = OCT-09-1976 and endDate = DEC-09-2008 
should show a duration of 32 years and 2 months.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 ноября 2008

Преобразование дат в две структуры struct tm с помощью strptime

Разное дает вам разницу между двумя в секундах.

Преобразуйте это в месяцы и т. Д. С помощью кода здесь (в C ++, но единственный C ++ предназначен для форматирования строк, легко изменить)

РЕДАКТИРОВАТЬ: как заметил комментатор, это позволяет избежать проблемы месяца. Существует (GPL'd) код для isodiff_from_secs, который можно преобразовать, чтобы делать то, что вы хотите, если вы довольны его предположением, что месяцы имеют 30 дней. См. Google codesearch и описание стандарта здесь

Выполнить полностью правильное решение, учитывающее истинные месяцы между фактическими днями, было бы довольно сложно. Это требуется для вашей проблемы?

1 голос
/ 29 ноября 2008

Недавно я сделал нечто очень похожее, используя Boost.Date_Time и представив получившуюся функцию как C, но для этого, конечно, требуется использовать компоновщик C ++.

На самом деле, пример оставляет желать лучшего - будут ли даты начала и окончания всегда в один и тот же день месяца? Если это так, вы можете проигнорировать номер дня, в итоге получится тривиальное вычитание чисел месяца и года.

Однако, если ваши даты могут быть где угодно в месяце, это может быть немного сложнее. Помните, что не все месяцы имеют одинаковое количество дней!

C difftime не помогает вам в месячных расчетах, поэтому я использовал Boost, хотя у вас может не быть такой опции.

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