Как вывести только дни ? 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 шт):
Я бы посчитал так:
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 день". Может, это неправильно - добавлять единицу?