如何修复:字符串未被识别为有效的日期时间错误
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"
因此给您错误。
大家好,我搜索了很多关于如何解决这个问题的方法,但似乎对我没有任何帮助,我认为我做错了什么,我不知道如何解决第一个问题。我像这里所有线程建议的那样交易 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"
因此给您错误。