我有以下代码来检查日期时间值是否为null或具有值。如果它为null,我希望它作为空字符串返回,否则它应该是它包含的值的字符串。
语句的Else
部分有效,它将值转换为字符串,但是,如果作为datetime传入的值为null,则它不会返回Nothing
,而是将值设置为'12:00:00 AM`,这导致我在项目的其他地方出现问题。
如何调整此函数以使null datetime值作为空字符串返回?
Public Shared Function dbToDate(o As Object) As DateTime
If o Is DBNull.Value Then
Return ""
Else
Return Convert.ToDateTime(o)
End If
End Function
答案 0 :(得分:0)
首先,DateTime
永远不会为空/无。由于它是值类型(Structure
),因此它将始终具有值。在这种情况下,默认值为DateTime.MinValue
。但VB.NET会为您处理此案例。 dt.Date = Nothing
会自动将该值与Date.MinValue
进行比较,以便根据需要进行操作。
但问题是你返回dt.ToString
。只需返回""
:
Public Shared Function sqlDate(dt As DateTime) As String
If dt.Date = Nothing Then
Return ""
Else
Return dt.ToString("yyyy-MM-dd")
End If
End Function
这是一个没有方法的版本:
Dim result = If(dt = Nothing, "", dt.ToString("yyyy-MM-dd"))
您可以看到使用此代码Date
永远不会为空:
Dim dt As Date = Nothing
Console.WriteLine( dt = Nothing )' true
Console.WriteLine( dt = Date.MinValue )' true
Console.WriteLine( Object.ReferenceEquals(Nothing, dt) )' always false because it's a value type
更新 acc。您的最新修改,与DbNull.Value
进行比较。我还会返回Nullable(Of Date)
:
Public Shared Function dbToDate(o As Object) As DateTime?
If DbNull.Value.Equals(o) OrElse o Is Nothing Then
Return Nothing
Else
Return Convert.ToDateTime(o)
End If
End Function