как мне сравнить две даты?

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Мы хотели бы сравнить дату из базы данных с текущей датой.

Вот что я пробовал до сих пор:

 'Obtain current date 

Dim curdate As String = Now.ToString("yyyy")

'Now compare curdate with date from db called eventdate. Event date is of dateTime datatype.

If drv("eventdate").ToString = "" And Year(drv("eventdate").ToString) = curdate Then

 'Then do some processing
End if
  

Когда я запускаю этот код, я получаю следующую ошибку:

Преобразование из строки «» в тип «Дата» недопустимо.

Пожалуйста, помогите!

Большое вам спасибо, эксперты.

Ответ №1:

 If Today.CompareTo(CDate(drv("eventdate")).Date) = 0 Then
    'Do something
End If
  

Я делаю предположение здесь, что вас интересует только день, а не время. В противном случае вероятность совпадения в течение данного дня составляла бы примерно 1 к 2,5 миллионам.


На основе комментария:

 If Today.Year.CompareTo(CDate(drv("eventdate")).Year) = 0 Then
    'Do something
End If
  

или

 If Today.Year = CDate(drv("eventdate")).Year Then
    'Do something
End if
  

И еще одна вещь: действительно похоже, что это проверка, которая должна выполняться вашей базой данных. Сделайте это частью запроса, который возвращает результаты. Это будет намного быстрее, и это то, к чему относится такая проверка. Все, что вам нужно, это добавить проверку в ваше предложение where следующим образом:

 Year(eventdate) = Year(current_timestamp)
  

Комментарии:

1. спасибо, Джоэл, за твой любезный ответ. Мы просто хотим, чтобы год был похож на 2011. Мы в основном пытаемся скрыть данные за предыдущие годы. Итак, в нашей текущей ситуации мы не хотим отображать какие-либо данные за 2010 год. если дата события пуста или дата события = ‘2010’, тогда отобразите одну вещь. В противном случае (год — текущий год, покажите что-нибудь еще.

2. Еще раз спасибо, Джоэл. Я перепробовал все ваши решения, и каждое из них выдает мне эту ошибку, которая похожа на то, что я получал: преобразование из типа ‘DBNull’ в тип ‘Date’ недопустимо. Я знаю, что в БД нет пустых данных.

3. Проверьте еще раз. Если он пытается преобразовать из DBNull, у вас может не быть пустых значений в вашей таблице, но они обязательно есть в результатах вашего запроса. Легко написать запрос, который бы это сделал.

Ответ №2:

Если drv есть экземпляр DataReader, проверьте DBNull .

 IF Not drv.IsDBNull(column_index_of_eventdate) Then
   ...
   If drv.GetDateTime(column_index).Year=Date.Now.Year Then
        ...
   End If
End If
  

Комментарии:

1. Спасибо, AVD. Отличная идея о проверке DBNull, но я не использую экземпляр DataReader. Любые другие идеи. Пожалуйста, также ознакомьтесь с моим ответом на предложенные решения Джоэла.

2. @ChidiOkeh Каков тип данных EventDate? Используйте IsNothing для проверки значения null. ЕСЛИ Not IsNothing(drv(«colName»)), то …

3. Тип данных — datetime . Сейчас я собираюсь протестировать. Я сообщу об этом в ближайшее время. Спасибо.

4. Никакой любви. Я, честно говоря, думал, что это будет просто.

Ответ №3:

Я полагаю, что у вас либо нулевое, либо пустое значение, также ваше сравнение неверно, попробуйте:

 If drv("eventdate").ToString <> "" Andalso Year(drv("eventdate").ToString) = curdate Then

 'Then do some processing
End if
  

Комментарии:

1. спасибо Jmoreno. очень сожалею о позднем ответе на это. Я не получил ответа по электронной почте. Я вижу это только сейчас, когда вернулся за дополнительным вопросом.

2. @ChidiOkeh, нет проблем. Кстати, DBNull. Значение. toString возвращает пустую строку, поэтому я использовал это вместо прямой проверки на null (не уверен, что было в вашей таблице), обычно вы хотели бы просто проверить на null .