如何修复:字符串未被识别为有效的DateTime错误

时间:2016-03-30 08:20:30

标签: .net vb.net date ms-access-2010 datetimepicker

嗨大家我搜索了很多关于如何解决这个问题,但似乎没有什么对我有用我觉得我做错了什么我不知道解决这个问题。我交易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只是为了通知你。提前致谢! :)

3 个答案:

答案 0 :(得分:1)

假设您的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来抓住这样的内容

答案 1 :(得分:0)

为什么不按原样使用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

答案 2 :(得分:0)

您无需将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"不符,因此会给您错误。