Какой самый простой способ получить разницу в месяцах между двумя датами в C #? - PullRequest
3 голосов
/ 10 февраля 2010

Какой самый простой способ получить разницу в месяцах между двумя датами в C #?

то есть: (date1 - date2) .TotalMonths .. такие вещи. спасибо!

Ответы [ 5 ]

5 голосов
/ 10 февраля 2010

Учитывая обновления, которые вы внесли в свой первоначальный вопрос: как насчет написания функции, которая занимает две даты и выполняет следующие действия,

DateTime d1 = new DateTime(2008, 12, 1);
DateTime d2 = new DateTime(2009, 1, 1);

var month_diff = (d2.Year - d1.Year)*12 + (d2.Month - d1.Month);
Console.WriteLine(month_diff);
4 голосов
/ 10 февраля 2010

Поскольку вы уже знаете, что ваши даты будут первыми в месяце:

int totalMonths = (date2.Year - date1.Year)*12 + date2.Month - date1.Month;
2 голосов
/ 10 февраля 2010

Если вы не знаете, как рассчитать диапазон дат в .net, вот хороший пример:

DateTime startTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddSeconds(75);

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

Источник: здесь .

DateTime не показывает разницу в месяце, так как каждый месяц имеет разное количество дней. Самый простой способ получить месяц - totaldays / 30.

2 голосов
/ 10 февраля 2010

Лучшее, что я могу предложить, - это получить общее количество дней, а затем приблизительно рассчитать количество месяцев, разделив их соответственно. Что-то вроде:

DateTime dt1 = new DateTime( 2010, 10, 23);
DateTime dt2 = new DateTime( 2010, 7, 23);
TimeSpan ts = dt1 - dt2;
int days_per_month = 30;
Console.Write( ts.TotalDays / days_per_month);

Если вы действительно в порядке с чем-то вроде 2010 1 февраля 2010 31 января, вернувшимся в качестве ответа в течение 1 месяца, то, учитывая приведенный выше код, вы сможете легко это сделать, используя

Console.Write( dt1.Month - dt2.Month);

Это не принимает во внимание год, поэтому я перехожу к другому ответу здесь, который делает это. :)

0 голосов
/ 10 февраля 2010

TimeSpan Класс:)

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (months): " + span.Days / 30 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...