2016-10-29 8 views
0

Я хочу сравнить два dateTimePickers в winforms с помощью C#.C# DateTimePicker проблема сравнения

Мой код сравнения:

if (dtpFromDate.Value > dtpToDate.Value) 
{ 
    MessageBox.Show("From Date is greater than To Date"); 
    return; 
} 

Ниже приведены значения двух dateTimePickers

dtpFromDate.Value = 10/29/2016 5:10:27 PM

dtpToDate.Value = 10/29/2016 5 : 10: 27 PM

но если два dateTimePickers установлены, чтобы быть в их начальные значения (т.е. сегодняшнюю дату), как указано выше, если заявление получил также верно, но то, что мне нужно, чтобы проверить, только если даты больше (FromDate> ToDate). Я делаю что-то неправильно?

+1

Хотя они кажутся равными (в их строковое представление) два DateTime значения могут отличаться в секундах или миллисекундах, если они инициализируются с DateTime .Теперь. Если вы хотите сравнить даты, которые вы можете использовать, вы можете использовать команду: .tatTMDate.dll. DtpToDate.Value.Date. –

+0

Попробуйте сделать _Console.WriteLine (dtpFromDate.Value.ToString ("MM/dd/yyyy HH: mm: ss. fff ") _ и то же самое для другого dtp. Вы увидите разницу – Steve

ответ

0

Чтобы быть здесь, тип данных dtpFromDate.Value имеет значение DateTime. Я всегда предпочитаю использовать DateTime.Tick для сравнения DateTime, так как это интегральный тип, поэтому сравнение очевидно для читателя, а также быстро.

Я считаю, что при создании двух различных элементов управления DateTimePicker они отличаются своими значениями менее чем на секунду, вызывая проблему. Если ваше намерение просто сравнить DateTime с наименьшим кол second, то вы можете сделать это

if ((dtpFromDate.Value.Ticks/TimeSpan.TicksPerSecond) > 
    (dtpToDate.Value.Ticks/TimeSpan.TicksPerSecond)) 
{ 
    MessageBox.Show("From Date is greater than To Date"); 
    return; 
} 

Объект DateTime имеет наименьший отсчет в Tick. Вы можете прочитать на DateTime.Ticks и TimeSpan на MSDN

Один тик представляет собой одну сто наносекунд или одна десятимиллионной секунды. В миллисекундах насчитывается 10 000 тиков, или 10 миллионов клещей в секунду.

0

Если вы не заботитесь о времени, сделать это:

if (dtpFromDate.Value.Date > dtpToDate.Value.Date) 
{ 
    MessageBox.Show("From Date is greater than To Date"); 
    return; 
}