Как рассчитать количество месяцев между двумя датами в C#

Я делаю это

datediff = (date1 - DateOfDeposit).TotalDays;

Но это дает нет. дней, и я хочу нет месяцев.

2 ответа

Решение

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

12 * (date1.Year - DateOfDeposit.Year) + (date1.Month - DateOfDeposit.Month)

Вы всегда можете добавить любой дробный компонент с DateTime.Day, но не ясно, как это должно быть точно определено (сколько месяцев между 29 января и 27 февраля?).

Если вы много работаете с датой и временем, библиотека Джона Скита Noda Time (которую он упоминает в своем ответе) является хорошим выбором.

Простейшим вариантом, вероятно, является использование моей библиотеки Noda Time, которая была разработана именно для такого рода вещей (а также для упрощения работы с датами и временем в целом):

LocalDate start = new LocalDate(2013, 1, 5);
LocalDate end = new LocalDate(2014, 6, 1);
Period period = Period.Between(start, end, PeriodUnits.Months);
Console.WriteLine(period.Months); // 16

Нет ничего встроенного в.NET, чтобы сделать это особенно легко. Вы можете вычесть годы и месяцы в соответствии с ответом Ани, а затем также принять во внимание день месяца, чтобы избежать проблемы, которую я описываю в комментариях. Я бы предложил сначала написать хороший набор юнит-тестов, учитывая високосные годы и тому подобное.

Другие вопросы по тегам