Как исправить ошибку: строка не распознана как действительное значение datetime ошибка



Привет ребята, я искал много о том, как это исправить, но ничего не работает для меня я думаю, что я делаю что-то не так, что я не знаю, чтобы исправить проблему 1. я торгую метод ParseExact, как все потоки здесь предлагают, но все равно эта ошибка всегда выходила вот мой пример кода:

Dim startDate = DateTime.ParseExact(DateTimePicker1.Text.ToString(), "dd/MM/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo)
    Dim endDate = DateTime.ParseExact(DateTimePicker2.Text.ToString(), "dd/MM/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo)
    Dim count As Integer


    For d As Integer = 0 To ServiceDataGridView.Rows.Count - 1
        If ServiceDataGridView.Rows(d).Cells(2).Value >= startDate & endDate <= ServiceDataGridView.Rows(d).Cells(2).Value Then
            count = count + 1
            MessageBox.Show(count)
        End If
    Next

В этом коде я пытаюсь подсчитать все строки в DataGridView, которые будут попадать между выбранной датой начала и датой окончания из двух DateTimePicker. Я не знаю, сработает ли это, но я должен исправить 1-я Ошибка 1-я, так что я могу проверить, работает он или нет. Формат даты для моего DataGridView таков: 30/03/2016 15: 51 просто чтобы вы знали. Заранее спасибо! :)

473   3  

3 ответов:

Вам не нужно форматировать DateTimePicker.Text в String, а затем Parse его в DateTime, чтобы использовать его. Просто используйте DateTimePicker.Value:

Dim startDate As DateTime = DateTimePicker1.Value 'This is already a DateTime
Dim endDate As DateTime = DateTimePicker2.Value
Dim count As Integer

For d As Integer = 0 To ServiceDataGridView.Rows.Count - 1
    If ServiceDataGridView.Rows(d).Cells(2).Value >= startDate & endDate <= ServiceDataGridView.Rows(d).Cells(2).Value Then
        count = count + 1
        MessageBox.Show(count)
    End If
Next

Тем не менее, в зависимости от того, как DateTimePicker.Format Ваш DateTimePicker.Text может выглядеть по-разному:

Wednesday, March 30, 2016 'Long
3/30/2016 'Short

И, следовательно, не соответствует вашему формату "dd/MM/yyyy HH:mm" и, следовательно, дает вам ошибку.

Предполагая, что ваш DataTimePicker1 на самом деле является DateTimePicker элементом управления, Вы можете просто использовать свойство Value:

Dim startDate = DateTimePicker1.Value

Здесь не требуется преобразование в строку и обратно к дате. [Причина сбоя кода, вероятно, связана с тем, что .ToString не выдает дату в точном формате, который вы указываете]

На самом деле вам также не нужно хранить это в переменной, поэтому вы можете значительно упростить свой код:

Dim count As Integer

For d As Integer = 0 To ServiceDataGridView.Rows.Count - 1
    If ServiceDataGridView.Rows(d).Cells(2).Value >= DateTimePicker1.Value AndAlso DateTimePicker2.Value <= ServiceDataGridView.Rows(d).Cells(2).Value Then
        count = count + 1
        MessageBox.Show(count)
    End If
Next

Обратите внимание, что вы использовали &, где вы должны были используется AndAlso - убедитесь, что вы переключаетесь Option Strict On, чтобы поймать такие вещи

Почему бы вам не использовать значения DateTime как есть ? Например:

Dim startDate = DateTimePicker1.Value
Dim endDate = DateTimePicker2.Value
Dim count As Integer

For d As Integer = 0 To ServiceDataGridView.Rows.Count - 1
    If ServiceDataGridView.Rows(d).Cells(2).Value >= startDate & endDate <= ServiceDataGridView.Rows(d).Cells(2).Value Then
        count = count + 1
        MessageBox.Show(count)
    End If
Next
    Ничего не найдено.

Добавить ответ:
Отменить.