2012-05-25 4 views
1

Привет, ребята, я пытаюсь сравнить две даты, по какой-то причине следующий код вернет false, если я укажу 25/05/2012 (startdate) и 31/05/12 (Дата окончания).mvc 2 дата начала и дата окончания даты

Это происходит только в том случае, если 25-й используется как дата начала, работает отлично, если я использую 26-й.

public bool IsValidDate(DateTime startDate, DateTime endDate) 
    { 
     return startDate < endDate && endDate > startDate; 
    } 

что может быть неправильным?

+3

Этот код не будет возвращать ложь для входов, которые вы указали. Пожалуйста, покажите свой реальный код, включая код, который вызывает этот метод. –

ответ

2

Вы должны что-то ошибиться. Для данного входа вы определили этот код возвращает true:

class Program 
{ 
    static void Main() 
    { 
     var startDate = new DateTime(2012, 5, 25); 
     var endDate = new DateTime(2012, 5, 31); 
     Console.WriteLine(IsValidDate(startDate, endDate)); 
    } 

    public static bool IsValidDate(DateTime startDate, DateTime endDate) 
    { 
     return startDate < endDate && endDate > startDate; 
    } 
} 

Печать true на консоли.

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

public bool IsValidDate(DateTime startDate, DateTime endDate) 
{ 
    return startDate < endDate; 
} 
+0

AH! i указала дату как DateTime startDate = new DateTime (2012-05-25); вместо использования комы. –

+0

@RajuKumar. Используя тире, компилятор фактически интерпретирует их как операторы вычитания, а также субтракторы 5, а затем 25 с 2012 года, затем передает rsult одному параметру конструктора объекта DateTime, который принимает количество Ticks. Это закончится как очень старая дата. И, конечно же, 2012 минус 5 минус 25 больше, чем в 2012 году минус 5 минус 30, хотя в математике в день было бы больше. –

0

Почему бы вы сделать функцию, чтобы проверить, если startDate < endDate?

private void button1_Click(object sender, EventArgs e) 
{ 
    DateTime startDate = new DateTime(2012 , 05 , 25); 
    DateTime endDate = new DateTime(2012 , 05 , 31); 

    bool rtnval = IsValidDate(startDate, endDate); 

} 


public bool IsValidDate(DateTime startDate, DateTime endDate) 
{ 
    return startDate < endDate && endDate > startDate; 
} 

этот код возвращает true !!!

разбить его и проверить у вас есть значения, которые вы хотите

public bool IsValidDate(DateTime startDate, DateTime endDate) 
{ 
    bool resulta = startDate < endDate; // break here 
    bool resultb = endDate > startDate; // break here 
    return startDate < endDate && endDate > startDate; 
} 

// упс я не понимал его ответили уже

+0

'startDate startDate' - это тот же оператор, вы просто добавляете дополнительный код в этот момент. – Codeman

Смежные вопросы