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

Я делаю это

datediff = (date1 - DateOfDeposit).TotalDays;

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

Ответ 1

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

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

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

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

Ответ 2

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