Как вывести только дни ? C#

class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;
        DateTime date = new DateTime(2005, 6, 11);
        Console.Write("Дней с моего дня рождение: ");
        Console.WriteLine(DateTime.Now.Subtract(date));
    }
}

Ответы (1 шт):

Автор решения: S.H.

Я бы посчитал так:

    static void Main(string[] args) {

        DateTime date = new DateTime(2005, 6, 11);
        TimeSpan ts = DateTime.Now.Date - date;
        Console.Write("Дней с моего дня рождения: ");
        Console.WriteLine( (int)ts.TotalDays + 1 );

    }

Если я правильно понял задачу, Вы хотите узнать "расстояние" между двумя датами в днях.

Для подсчетов такого типа в C# есть тип TimeSpan. У него есть метод, который выводит этот промежуток "в днях".

Исходя их условности "между вчера и сегодня прошло два дня" я добавляю к результату единицу.

Если же Вы имеет в виду "сколько дней прошло с моего дня рождения в этом году", то подсчет будет немного другой:

    static void Main(string[] args) {

        DateTime date = new DateTime(2005, 6, 11);
        DateTime date2 = new DateTime(2005, DateTime.Now.Date.Month, DateTime.Now.Date.Day);
        TimeSpan ts = date2 - date;
        Console.Write("Дней с моего дня рождение: ");
        Console.WriteLine( (int)ts.TotalDays + 1 );
    
     }

Хотя, мне представляется, что здесь результат лучше считать не по 2005-му году, а по текущему:

    static void Main(string[] args) {

        DateTime date = new DateTime(DateTime.Now.Year, 6, 11);
        DateTime date2 = DateTime.Now.Date;
        TimeSpan ts = date2 - date;
        Console.Write("Дней с моего дня рождение: ");
        Console.WriteLine( (int)ts.TotalDays + 1 );

    }

так как это позволит учесть случай високосного года, когда межуд текущей датой и днём рождения, например, в январе другое кол-во дней, чем в не-високосный год.

Ну, и накоонец, tym32167 любезно проедложил оптимизацию, которая не пришла мне в голову в спешке - смотрите в комментарии

Дополнение

А еще может быть так, что день рождения в этом году еще не наступил. Тогда посчитать надо с предыдущего дня рождения:

        DateTime date = new DateTime(DateTime.Now.Year, 6, 11);
        DateTime date2 = DateTime.Now.Date;
        TimeSpan ts = date2 - date;
        int tdays = (int)ts.TotalDays;
        if (tdays < 0)
            tdays += 365;
        Console.Write("Дней с моего дня рождение: ");
        Console.WriteLine(tdays + 1 );

Правда, опять появляется засада с високосными годами - и с тем, что ровно в день рождения ответ будет "1 день". Может, это неправильно - добавлять единицу?

→ Ссылка