2013-09-05 75 views
0

我希望有人可以幫忙,我一直在爲此奮鬥了幾天。vb.net rowfilter 15分鐘前的日期

我試圖使用有就是超過15分鐘前的一列的日期時間一個RowFilter,來過濾掉一些記錄,看着它,這看起來對我來說,就好像它會做到這一點:

Dim TimeStr As String 
    TimeStr = String.Format(CultureInfo.InvariantCulture, "#{0}#", Now.AddMinutes(-15)) 
    AlertsView.RowFilter = "StatusId < 3 AND LastEmailed < " & TimeStr 

之前的過濾器有6行在視圖中,但後過濾器沒有,我知道StatusId字段是正確的,就好像我過濾只是它工作正常。所有6行有LastEmailed值2013-09-03 23:06:44.813

我在想這可能是字符串轉換的東西,但我卡住了。

非常感謝在RowFilter表達兩個#字符之間

+0

如果你在'AlertsView.RowFilter =「StatusId <3 AND LastEmailed <」&TimeStr'行上放置了一個斷點,那麼'TimeStr'的值是什麼? –

+0

不確定,所以我張貼評論,但CultureInfo.InvarianCulture產生#09/05/2013 xx:xx:xx#不是您所說的預期格式 – Steve

+0

#09/05/2013 17:15:48#是TimeStr的值 – Iain

回答

1

任何將被最終傳遞到DateTime.Parse(s, CultureInfo.InvariantCulture)

這應該在MSDN documentation中提及DataColumn.Expression,但事實並非如此。但是,如果你深入挖掘,可以在內部類System.Data.ConstNode的構造函數中找到它。

所以只要你在不變文化中產生明確的值,你應該沒問題。只是爲了安全起見,您可能需要使用"s" format specifier爲您提供類似2013-12-31T12:34:56的值。將您的格式字符串更改爲"#{0:s}#"

或者更清潔:

Dim TimeStr As String 
TimeStr = Now.AddMinutes(-15).ToString("s", CultureInfo.InvariantCulture) 
AlertsView.RowFilter = "StatusId < 3 AND LastEmailed < #" & TimeStr & "#" 

String.Format不買你在這裏多。

另外 - 只是出於好奇,你確定你沒有比較蘋果和橘子?一個數據庫存儲UTC時間在LastEmailed等字段中並不罕見。您可能需要使用DateTime.UtcNow而不僅僅是Now(這是DateTime.Now的別名)。

+0

馬特,謝謝你指出,它現在按預期工作。 – Iain