K3JAE Ответов: 1

2 преобразование строки в дату


У меня есть текстовое поле, в котором есть дата и время, отформатированные как таковые:

12 августа 2016 года в 15: 00

Мне нужно отбросить" @", а затем преобразовать результат в строку datetime. Какова правильная процедура для этого, поскольку преобразования даты и времени всегда бросают меня?

------

Кроме того, у меня есть вторая область, где у меня есть DateTimePicker (no time) и 2-е текстовое поле с только временем в нем.

EX: dpShipArriveDate = 12 Aug 2016 / tbShipArriveTime = 15:28
Вышеперечисленные элементы записываются в 2 отдельных столбца данных в моей базе данных и должны оставаться таковыми.

Мне нужно объединить эти два элемента в одну строку datetime. В настоящее время tbShipArriveDate помещает дату и 00:00:00, и мне нужно поместить время из tbShipArriveTime в исходное tbShipArriveDate и заменить 08/12/2016 00:00:00, чтобы получить новое значение 08/12/2016 15:28:00. Значения должны быть в течение 24 часов, и требуется только HH:mm.

Моя конечная цель состоит в том, чтобы сравнить два отдельных значения datetime и определить, является ли result2 после (или позже), чем result1.

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

Private Sub tb01Time_TextChanged(sender As Object, e As EventArgs) Handles tb01Time.TextChanged
        Dim result1 As String = tb01Time.ToString
        Dim result2 As DateTime = DateTime.Parse(dpShipArriveDate.ToString + " " + tbShipArriveTime.ToString)

        Dim late As String

        If result2 > result1 Then
            late = "True"
        Else
            late = "False"
        End If

        Select Case late.ToString
            Case = "True" : tb01Time.BackColor = Color.Red
                tbShipArriveTime.BackColor = Color.Red
                tb01Time.ForeColor = Color.White
                tbShipArriveTime.ForeColor = Color.White
            Case Else : tb01Time.BackColor = Color.White
                tbShipArriveTime.ForeColor = Color.White
                tb01Time.ForeColor = Color.Black
                tbShipArriveTime.ForeColor = Color.Black
        End Select
    End Sub

Maciej Los

Вы не можете сравнивать даты (хранящиеся в строковых переменных) таким образом!

1 Ответов

Рейтинг:
5

Maciej Los

Прежде всего, пожалуйста, прочтите мой комментарий к этому вопросу.

Вы должны преобразовать обе строки в одну дату, тогда вы сможете сравнить ее с другой датой. Например:

Dim sTime As String = "15:00"
Dim sDate As String = "12 Aug 2016"
Dim sDateFormat As String = "dd MMM yyyy HH:mm"
Dim sDateString = String.Concat(sDate, " ", sTime)
Dim resultDate As Date

If Date.TryParseExact(sDateString, sDateFormat, Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, resultDate) Then
    Console.WriteLine("'{0}' sucessfuly converted into date!", sDateString)
    'your logic to compare dates!
Else
    Console.WriteLine("Incorrect date: '{0}'", sDateString)
End If


Выше код возвращает:
'12 Aug 2016 15:00' sucessfuly converted into date!

Для получения более подробной информации, пожалуйста, смотрите:
значение datetime.Метод Метод Tryparseexact (Строка, Строка, Объекта Iformatprovider, DateTimeStyles, Датавремя) (Система)[^]
значение datetime.Метод Сравнения (DateTime, DateTime) (System)[^]
значение datetime.Метод CompareTo (DateTime) (Система)[^]


K3JAE

Используя ваш код в качестве шаблона, я успешно разработал код для сравнения и исправления.

Мне пришлось внести одно изменение в ваш код, и это была последняя строка - resultDate в качестве даты ...
Полная линия сейчас читает: Дим resultDate как дата = функция cdate(sDateString.Метод toString)

Я также удалил строки ConsoleWrite, так как они были не нужны.

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

Maciej Los

Всегда пожалуйста.
Твое Здоровье, Мацей