Как исправить ошибку: строка не распознана как действительное значение 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 просто чтобы вы знали. Заранее спасибо! :)
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
Comments