2016-04-20 4 views
0

В случае 2/1/2016 - 1/31/2019:
Я хотел бы выход: " 3 года, поскольку диапазон дат составляет 3 года.Выписывая сколько лет и месяцев находятся в диапазоне дат (т.е. 2 года и 3 месяца)

В случае 2/1/2016 - 3/31/2019:
Я хотел бы выход: «3 года и 2 месяца», поскольку диапазон дат составляет 3 года и 2 месяца.

Мне не нужно беспокоиться о днях, поэтому я могу просто округлить, если это норма.

Есть ли там помощники C#, которые могут мне помочь с чем-то подобным?

+0

Вот что вам нужно - http://stackoverflow.com/a/4127396/4383585 – Red

+1

Проблема с этим состоит в том, что год и месяц не установлены единицы времени. – juharr

+0

@juharr Хотя это правда, я думаю, что наивный «месяц/12 + остаток» достаточно прочен для отображения в пользовательском интерфейсе (который, как представляется, является целью этого) – Rob

ответ

1

В течение примерно расчета лет и месяцев, вы можете сделать следующее:

DateTime dayStart; 
DateTime dateEnd; 

TimeSpan ts = dateEnt - dateStart 
int years = ts.Days/365; 
int months = (ts.Days % 365)/31; 

Для точных calulations, это может быть сложно с учетом високосных лет, разное количество дней в месяцах, и т.д..

1

Вы можете использовать это, не очень заботятся о високосных:

DateTime first = new DateTime(2016, 2, 1); 
DateTime second = new DateTime(2019, 3, 31); 
double totalMonths = (second - first).TotalDays/(365.25/12); 
int years = (int)totalMonths/12; 
int months = (int)Math.Round(totalMonths - (years * 12), 0); 
+0

Так вы говорите, если диапазон дат включает в себя високосный год результаты этого были бы неточными? Не могу ли я просто заменить 365.25 на 366, если високосный год? –

+0

Не волнуйся больше всего о високосный год, так как редко бывает, что это на самом деле повлияет на описание, которое я пытаюсь создать? –

 Смежные вопросы

  • Нет связанных вопросов^_^