Member 11403304 Ответов: 1

Как сравнить дату со временем с датой без времени?


Я использую объект objCurrentWarrantStatus, чтобы получить базу данных datetime, которая является #11/3/2016 6:36: 49 AM#. Я хотел бы сравнить его с датой, которую я имею в xml-документе, который является &ЛТ;warrantstatusdate&ГТ;2016-11-03
Дата XML нет времени обновлять базу данных и времени на это.
Мой код терпит неудачу по той причине, что эти два типа не совпадают. Сравнение #11/3/2016 6: 36: 49 AM# с 2016-11-03 не работает.
Код, который я имею ниже, должен пройти (не генерировать ошибку), но так как дата базы данных также имеет время в нем, я не могу сравнить его с датой в xml-документе, потому что дата xml-документа не имеет времени в нем. Это приводит к тому, что мой код терпит неудачу. Если я смогу понять, что нужно изменить, чтобы эти две даты были в одном и том же формате, то мой код не потерпит неудачи.
Что мне нужно изменить, чтобы дата базы данных, в которой есть время, и дата xml, в которой нет времени, были в одном формате для их сравнения?

objCurrentWarrantStatus = Msc.Integration.Mncis.Library.v4.WarrantStatus.GetCurrent(Trim(objXMLInputDoc.DocumentElement.SelectSingleNode("msc:WarrantNumber/msc:ID", objXMLNameSpaceManager).InnerText))
        If (Not objCurrentWarrantStatus Is Nothing) _
            AndAlso ((objXMLInputDoc.DocumentElement.SelectSingleNode("msc:CurrentWarrantStatus/msc:WarrantStatusTypeText/@code", objXMLNameSpaceManager).InnerText <> objCurrentWarrantStatus.TypeCodeWord) _
            Or (CDate(objXMLInputDoc.DocumentElement.SelectSingleNode("msc:CurrentWarrantStatus/msc:WarrantStatusDate", objXMLNameSpaceManager).InnerText) <> objCurrentWarrantStatus.Date)) Then
            strErrorResponse = "The date used for CurrentWarrantStatus was incorrect."
            objXMLInputDoc.DocumentElement.SetAttribute("error", strErrorResponse)
        End If


Вот это свойство на сегодняшний день
Public Property Date As Nullable(Of DateTime)
	Get
	Set


Что я уже пробовал:

Я попробовал следующий код, но он не работает, потому что дата в базе данных (objCurrentWarrantStatus) имеет время в нем, в то время как дата в xml-документе не имеет времени. Поэтому их нельзя сравнивать.

objCurrentWarrantStatus = Msc.Integration.Mncis.Library.v4.WarrantStatus.GetCurrent(Trim(objXMLInputDoc.DocumentElement.SelectSingleNode("msc:WarrantNumber/msc:ID", objXMLNameSpaceManager).InnerText))
        If (Not objCurrentWarrantStatus Is Nothing) _
            AndAlso ((objXMLInputDoc.DocumentElement.SelectSingleNode("msc:CurrentWarrantStatus/msc:WarrantStatusTypeText/@code", objXMLNameSpaceManager).InnerText <> objCurrentWarrantStatus.TypeCodeWord) _
            Or (CDate(objXMLInputDoc.DocumentElement.SelectSingleNode("msc:CurrentWarrantStatus/msc:WarrantStatusDate", objXMLNameSpaceManager).InnerText) <> objCurrentWarrantStatus.Date)) Then
            strErrorResponse = "The date used for CurrentWarrantStatus was incorrect."
            objXMLInputDoc.DocumentElement.SetAttribute("error", strErrorResponse)
        End If

1 Ответов

Рейтинг:
9

phil.o

Согласно с MSDN: структура DateTime[^], есть DateTime.Date свойство, которое вы можете использовать для извлечения из datetime части, относящейся к дате.
Что-то вроде:

Dim dateWithTime As DateTime = DateTime.Now '' 2016/11/03 12:30
Dim dateWithoutTime As DateTime = dateWithTime.Date '' 2016/11/03

Итак, вы должны извлечь часть даты из objCurrentWarrantStatus прежде чем сравнивать его с тем, что есть в XML-документе.

[Отредактированный]
Это может сработать:
Dim dateWithoutTime As DateTime
If (objCurrentWarrantStatus.Date.HasValue)
   dateWithoutTime = objCurrentWarrantStatus.Date.Value.Date
Else
   '' No datetime value. Something should be decided about the dateWithoutTime variable.
End If


Или лучше: если вам нужна только часть даты в свойстве Date (что казалось бы логичным), лучше сделать это при извлечении данных из базы данных.
[/Отредактированный]

Любезно.


Member 11403304

Спасибо за помощь. Однако я не уверен, как извлечь часть даты из objCurrentWarrantStatus. У меня их не так уж много vb.net опыт кодирования.

phil.o

Так как у меня нет кода sc.Integration.Mncis.Library.v4.WarrantStatus.GetCurrent() метод, который присваивает вашей переменной значение, я больше ничего не могу сказать, Извините. Я даже не уверен, что эта переменная является структурой DateTime. Вы храните DateTime в виде строки в базе данных?

Member 11403304

Вот класс WarrantStatus.
public static WarrantStatus GetCurrent(string astrWarrantNumber, bool ablnUsePrimaryDatastoreOnly)

И за дату
Дата Публичной Собственности Как Nullable(Of DateTime)
Возьми
Набор

phil.o

Я не вижу никакой даты и времени, извините. Как вы извлекаете эту дату-время из базы данных? Где вы его храните и как?
Пожалуйста, избегайте размещения кода в комментариях. Скорее используйте зеленую кнопку "улучшить вопрос" и квалифицируйте свой вопрос более релевантными фрагментами кода.

Member 11403304

Хорошо я добавлю код в вопрос

phil.o

Я обновил свой ответ.

Member 11403304

Большое спасибо за помощь. Ваше решение сработало!

phil.o

Пожалуйста.