Как рассчитать количество месяцев между двумя датами в 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, чтобы сделать это особенно легко. Вы можете вычесть годы и месяцы в соответствии с ответом Ани, а затем также принять во внимание день месяца, чтобы избежать проблемы, которую я описываю в комментариях. Я бы предложил сначала написать хороший набор юнит-тестов, учитывая високосные годы и тому подобное.