vb.net System.IFormatProvider运行时错误

vb.net System.IFormatProvider运行时错误,vb.net,Vb.net,我在vb.net中有以下功能: Function GetFirstDayOfMonth(ByVal dtDate As DateTime) As DateTime Dim dtFrom As DateTime = dtDate dtFrom = dtFrom.AddDays(-(dtFrom.Day - 1)) Return dtFrom End Function 我在这里称之为: GetFirstDayOfMonth(reader3.GetSt

我在vb.net中有以下功能:

Function GetFirstDayOfMonth(ByVal dtDate As DateTime) As DateTime
        Dim dtFrom As DateTime = dtDate
        dtFrom = dtFrom.AddDays(-(dtFrom.Day - 1))
        Return dtFrom
End Function
我在这里称之为:

GetFirstDayOfMonth(reader3.GetString(3.ToString)(“yyyy-MM-dd”))

我已经使用
MsgBox
检查了
reader3.GetString(3)
的值,它等于

2015-02-23
但是我得到一个运行时错误,它说:

Additional information: Unable to cast object of type 'System.String' to type 'System.IFormatProvider'.

您正在将字符串值传递到需要DateTime的函数中

Dim tmp as DateTime

' Don't use the string format here. If it's already 
' a string - GetString - then it doesn't need a date format
' I recommend listening to @Hans Passant and @Bjørn-RogerKringsjå
' If your data is already a date, use the date functions to
' keep it as a date
Dim tmpStr As String = reader3.GetString(3)   

If DateTime.TryParse(tmpStr, tmp) Then
    GetFirstDayOfMonth(tmp)
End If
将其保留为日期而不强制转换或格式化(假设它是数据库中的日期对象)


此外,启用option strict应该会将其转化为编译时错误(更有用)。

您正在向需要日期时间的函数发送字符串值。启用
option strict
会将此转换为编译时错误。您正在向函数传递一个字符串,该函数指定提供了日期时间对象。请改用DataTableReader.GetDateTime()。如果失败,那么修复这个巨大的错误,永远不要将日期存储为数据库中的字符串。我如何将该字符串改为DateTime?在tmpStr变量中,我仍然可以看到数据库中的运行时错误,列是DateTime,但我选择使用date(时间戳)作为调用日期
Dim firstDay As DateTime = GetFirstDayOfMonth(reader3.GetDateTime(3))