vb.net rowfilter日期时间为15分钟前

时间:2013-09-05 15:51:41

标签: vb.net datetime rowfilter

我希望有人可以提供帮助,我几天来一直在努力解决这个问题。

我正在尝试使用rowfilter过滤掉一些记录,该行过滤器的日期时间早于15分钟之前的一列,看着它,这看起来好像它会这样做:

    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

我认为它可能是字符串转换的东西,但我被卡住了。

非常感谢

1 个答案:

答案 0 :(得分:1)

#表达式中两个RowFilter字符之间的任何内容最终都会传递到DateTime.Parse(s, CultureInfo.InvariantCulture)

这应该在DataColumn.Expression的{​​{3}}中提及,但事实并非如此。但是,如果深入挖掘,可以在内部类MSDN documentation的构造函数中找到它。

因此,只要你在不变文化中产生明确的价值观,你应该没事。为了安全起见,您可能希望使用System.Data.ConstNode为您提供类似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而不是NowDateTime.Now的别名)。

相关问题