Вычислить год, месяц и день между двумя датами в С#

Я хочу, чтобы точный год, месяц и день истекли между двумя датами.

DateTime startDate = new DateTime(1974, 8, 15);

DateTime endDate = DateTime.Now.ToLocalTime();

Я хочу найти количество лет, месяцев и дней, прошедших между указанными выше двумя днями, используя С#?

Мой ожидаемый результат

Годы: 68 Месяцы: 10 Дни: 23

Я сослался на один из постов, в котором они объяснили только дни между двумя датами (количество дней)?

Но мне нужны все три - Год, Месяц и День. Помогите, пожалуйста, как рассчитать...

Объяснение для дубликата: уже опубликован вопрос с такой же логикой в ​​разделе Рассчитать Годы, месяцы, недели и дни, ответ, представленный в этом вопросе, слишком длинный, и в своем вопросе я задал только год, месяц и дату, а не неделю. Концепция такая же, но логика расчета дней отличается от этого вопроса. Здесь я получил ответ в очень упрощенной форме. Я удовлетворен своим ответом.

Точная копия:

Исходный вопрос: Как получить разницу между две даты в году/месяце/неделе/дне? (задавался вопрос 7 лет назад)

Ваш отмеченный вопрос: Рассчитать годы, месяцы, недели и дни ( Спросил 5 лет назад)


person Community    schedule 06.07.2016    source источник
comment
Как получить 68 лет с 1974 по 2016 год?   -  person John Koerner    schedule 06.07.2016
comment
Фактическая разница 2016 - 1947 = 69, но мы рассчитываем месяц и день, поэтому я неправильно использовал год на единицу.   -  person    schedule 06.07.2016


Ответы (1)


Интересный вопрос:

Решение

void Main()
{
    DateTime zeroTime = new DateTime(1, 1, 1);
    DateTime olddate = new DateTime(1947, 8,15);
    olddate.Dump();
    DateTime curdate = DateTime.Now.ToLocalTime();
    curdate.Dump();

    TimeSpan span = curdate - olddate;

    // because we start at year 1 for the Gregorian 
    // calendar, we must subtract a year here.

    int years = (zeroTime + span).Year - 1;
    int months = (zeroTime + span).Month - 1;
    int days = (zeroTime + span).Day;

    years.Dump();
    months.Dump();
    days.Dump();
}
person B.Balamanigandan    schedule 06.07.2016
comment
Решение очень популярное, но оно явно неверно, так как количество лет/месяцев зависит от точных дат и определения того, что ищет OP. т.е. сколько 30 дней в месяце - 1 месяц 2 дня или 1/1 или 1/0 или 0/30? - person Alexei Levenkov; 06.07.2016
comment
@AlexeiLevenkov Сомнение абсолютно правильное. вы тестируете с помощью DateTime olddate = DateTime.Now.AddDays(-29);. Результат: Год: 0, Месяц: 0, Дни: 30. Это будет нормально работать во всех сценариях. - person B.Balamanigandan; 06.07.2016
comment
Если моя дата начинается с заданной даты, то может из года нужно вычесть 1? - person Abdullah Al Mamun; 26.12.2018
comment
Это отклонено на 1 день. Должно быть День - 1. - person Jerome Viveiros; 12.01.2021
comment
@JeromeViveiros. Я согласен, но это вопрос определения (начинаете ли вы считать с 0 или 1). - person Mike Fuchs; 30.06.2021
comment
Б.Баламанигандан: Алексей прав. См. мой ответ здесь для расширенного объяснения. Однако я по-прежнему считаю, что этот код — лучшее приближение, которое мы можем получить. - person Mike Fuchs; 30.06.2021
comment
@MikeFuchs... Честно говоря, я использую код. Это работает, но я не понимаю, почему определение дня должно отличаться от года или месяца. Честно говоря, с течением времени это не имеет большого значения. Используя его, чтобы показать разницу во времени для преодоления зависимости ... Я уже 8 с лишним лет не употребляю метамфетамин и около шести месяцев с тех пор, как бросил курить ... Дни имеют значение только в самом начале. - person Jerome Viveiros; 02.07.2021
comment
@JeromeViveiros. Согласитесь, варианты использования, которые используют этот тип вывода, редко слишком заботятся о точном количестве дней. Молодец, что поборол зависимость. - person Mike Fuchs; 04.07.2021