Как отобразить разницу между двумя датами в 00Y 00M - PullRequest
1 голос
/ 21 апреля 2009

Учитывая два DateTimes в C #, как я могу отобразить разницу в годах и месяцах?

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

Спасибо за любую помощь.

Ответы [ 4 ]

2 голосов
/ 21 апреля 2009

Поскольку базовое представление измеряется в 100-наносекундных тиках с 12:00 полуночи, 1 января, 1 г. н.э., вычитание будет корректно обрабатывать високосные годы и т. Д .:

DateTime date1 = ...
DateTime date2 = ...

// date2 must be after date1

TimeSpan difference = date2.Subtract(date1);
DateTime age=new DateTime(tsAge.Ticks); 

int years = age.Years - 1;
int months = age.Month - 1;

Console.WriteLine("{0}Y, {1}M", years, months);
1 голос
/ 21 апреля 2009

FWIW вот что я закончил с

        DateTime servicelength = new DateTime(DateTime.Now.Subtract(employee.StartDate).Ticks);
        LengthOfService.Text = String.Format("{0}Y {1}M", servicelength.Year - 1, servicelength.Month - 1);
0 голосов
/ 21 апреля 2009

Разная длина месяца? Какой месяц это займет? промежуток времени не привязан к определенному году или месяцу в году. Вы можете только посчитать дни между двумя датами:

Timspan span = date2 - date1;

Console.Writeline("Days between date1 and date2: {0}", span.Days);

Считая из DateTime.MinValue, просто берите год 0001 и отсчитывайте месяцы с января. Я не думаю, что это имеет практическое значение.

EDIT:

Была другая идея. Вы можете посчитать месяц с даты1:

// primitive, inelegant, but should work if date1 < date2
int years = date2.Year - date1.Year;
int month = date2.Month - date1.Month;
if (month < 0) 
{
  years -= 1;
  month += 12;
}
Console.Writeline("{0}Y {1}M", years, month);

Проблема здесь в том, что вы просто игнорируете дни. В конце концов, это не очень хорошее решение.

0 голосов
/ 21 апреля 2009

Вы можете попробовать это:

DateTime date1 = new DateTime(1954, 7, 30);
DateTime today = DateTime.Now;

TimeSpan span = today - date1;
DateTime age = DateTime.MinValue + span;

int years = age.Year - 1;
int months = age.Month - 1;
int days = age.Day - 1;

Console.WriteLine("years: {0}, months: {1}, days: {2}", years, months, days);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...