Return .NET 中使用 TryParseExact 的默认日期
Return a default date with TryParseExact in .NET
为什么这个函数不是return默认值?
如果解析失败,日期 1900-01-01 应该 returned。
而是 returns 01/01/0001 .NET
的默认日期
Public Shared Function ParseDate(FieldName As Object) As Date
Dim ID As Date = "1900-01-01"
If TypeOf FieldName Is TextBox Then
If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID) Then
ID = FieldName.Text
End If
End If
Return ID
End Function
您误解了 DateTime.TryParse
的工作原理。它不会 return 您传递的 DateTime
作为后备值。 out 参数对您的输入参数不感兴趣。如果无法解析,TryParse
将为输出参数分配默认值 DateTime
,即 MinValue
。那是 documented.
When this method returns, contains the DateTime
value equivalent to
the date and time contained in s, if the conversion succeeded, or
MinValue
if the conversion failed. The conversion fails if the s
parameter is null
, is an empty string (""), or does not contain a
valid string representation of a date and time. This parameter is
passed uninitialized.
所以你看到它 returns DateTime.MinValue
如果它无法解析成功。
但是无论如何你都应该使用 returned Boolean
来确定它是否可以被解析:
Dim validDate = Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID)
以上函数可以重写为:
Public Shared Function ParseDate(FieldName As Object) As Date
If TypeOf FieldName Is TextBox Then
Dim dt as Date
If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then
Return dt
End If
End If
Return New Date(1900, 1, 1)
End Function
为什么这个函数不是return默认值?
如果解析失败,日期 1900-01-01 应该 returned。
而是 returns 01/01/0001 .NET
的默认日期Public Shared Function ParseDate(FieldName As Object) As Date
Dim ID As Date = "1900-01-01"
If TypeOf FieldName Is TextBox Then
If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID) Then
ID = FieldName.Text
End If
End If
Return ID
End Function
您误解了 DateTime.TryParse
的工作原理。它不会 return 您传递的 DateTime
作为后备值。 out 参数对您的输入参数不感兴趣。如果无法解析,TryParse
将为输出参数分配默认值 DateTime
,即 MinValue
。那是 documented.
When this method returns, contains the
DateTime
value equivalent to the date and time contained in s, if the conversion succeeded, orMinValue
if the conversion failed. The conversion fails if the s parameter isnull
, is an empty string (""), or does not contain a valid string representation of a date and time. This parameter is passed uninitialized.
所以你看到它 returns DateTime.MinValue
如果它无法解析成功。
但是无论如何你都应该使用 returned Boolean
来确定它是否可以被解析:
Dim validDate = Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, ID)
以上函数可以重写为:
Public Shared Function ParseDate(FieldName As Object) As Date
If TypeOf FieldName Is TextBox Then
Dim dt as Date
If Date.TryParseExact(FieldName.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then
Return dt
End If
End If
Return New Date(1900, 1, 1)
End Function