如何修复:字符串未被识别为有效的日期时间错误

How to Fix : String was not recognized as a valid DateTime Error

大家好,我搜索了很多关于如何解决这个问题的方法,但似乎对我没有任何帮助,我认为我做错了什么,我不知道如何解决第一个问题。我像这里所有线程建议的那样交易 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 的所选开始日期和结束日期之间的所有行。我不知道这是否有效,但我必须首先修复第一个错误,这样我才能验证它是否有效。我的 DataGridView 的日期格式是这样的:30/03/2016 15:51 只是想让你知道。提前致谢! :)

假设您的 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

您不需要将 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" 因此给您错误。