vb.net将日期值转换为时间

时间:2016-07-29 14:17:14

标签: sql vb.net string datetime null

我有以下代码来检查日期时间值是否为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

1 个答案:

答案 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