2013-10-11 37 views
1

如何將Timespan添加到可爲空的日期時間變量?可空的日期時間變量沒有添加時間跨度方法?

我想我的日期時間轉換爲以下格式,並把它傳遞給存儲過程作爲參數

dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59)); 
sparamToDate.Value = dtToDate .Value.ToString("yyyy-MM-dd HH:mm:ss"); 

以上工作細如dtToDate不能爲空

,但可能爲空的日期時間變量 我coulkd無法找到方法Add使用以下代碼並將其轉換爲我的日期時間格式 2013-10-11 23:59:59.000

dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59)); NOT WORKING FOR NULLABLE DATETIME :(

回答

3

可爲空的類型不是應該是以支持它們的非空對象支持的每個操作。它只是簡單地包裝了一個結構體,使得它可以將它視爲值爲null。在嘗試訪問其任何成員之前,您需要測試該值是否爲空。

你可以這樣做:

if (dtToDate.HasValue) 
{ 
    dtToDate = dtToDate.Value.Add(new TimeSpan(23, 59, 59)); 
} 

或者這樣:

dtToDate = dtToDate.HasValue ? dtToDate.Value.Add(new TimeSpan(23, 59, 59)) : dtToDate; 

但是,如果你真的想,你可以定義一個extension method,像這樣:

public static DateTime? Add(this DateTime? dt, TimeSpan offset) 
{ 
    return dt.HasValue ? dt.Value.Add(offset) : dt; 
} 

而且然後像這樣調用它:

dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59)); 
+0

然後不工作也 錯誤 'System.Nullable ' 不包含定義爲'添加'和沒有擴展方法'添加'接受類型'System.Nullable '的第一個參數可以找到(你是否缺少使用指令或程序集引用?) – Neo

+0

@ashuthinks答案清楚地顯示一個定製的擴展方法,提供這... –

+0

@ashuthinks如果你使用我的第一個或第二個請注意'dtToDate.Value.Add(新TimeSpan(23,59,59))'中的'.Value''。如果您想要使用第三種解決方案,請閱讀擴展方法,並確保您已將其作爲靜態類的靜態方法實現,幷包含相關的名稱空間。 –

2

你需要調用Add()Nullable<DateTime>Value屬性:

if (dtToDate != null) { dtToDate = dtToDate.Value.Add(someTimeSpan); }