Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有DateTime和less或equal运算符问题的DataTable筛选器表达式_C#_Ado.net - Fatal编程技术网

C# 带有DateTime和less或equal运算符问题的DataTable筛选器表达式

C# 带有DateTime和less或equal运算符问题的DataTable筛选器表达式,c#,ado.net,C#,Ado.net,我有以下代码: DataTable t = new DataTable(); t.Locale = CultureInfo.InvariantCulture; t.Columns.Add("Date", typeof(DateTime)); DateTime today = DateTime.Now; DateTime yesterday = today.AddDays(-

我有以下代码:


            DataTable t = new DataTable();
            t.Locale = CultureInfo.InvariantCulture;
            t.Columns.Add("Date", typeof(DateTime));

            DateTime today = DateTime.Now;
            DateTime yesterday = today.AddDays(-1);
            DateTime tomorow = today.AddDays(1);

            t.Rows.Add(yesterday);
            t.Rows.Add(today);
            t.Rows.Add(tomorow);

            string filter = string.Format(CultureInfo.InvariantCulture,
                "Date >= #{0}# AND Date <= #{1}#", yesterday, tomorow);

            t.DefaultView.RowFilter = filter;

            foreach (DataRowView v in t.DefaultView)
                Console.WriteLine(v["date"]);
此循环应显示与以下相同的结果


foreach (DataRowView v in t.DefaultView)
  Console.WriteLine(v["date"]);
从上一个例子来看,是吗?不此处
尝试使用

DateTime today = DateTime.Today;
如果未解决,请检查日期字段是否也包含时间。这就是你的问题所在

更新:你的第二个评论

当您与DateTime进行比较时。现在,例如Date尝试使用

DateTime today = DateTime.Today;
如果未解决,请检查日期字段是否也包含时间。这就是你的问题所在

更新:你的第二个评论


当您与日期时间进行比较时。现在,例如日期日期比较会考虑时间。例如,“今天中午”比“今天”更重要。如果使用
DateTime.Now
,则包含时间。因此,如果
DateTime.Now
是“今天中午”,那么
明天=今天。AddDays(1)
小于“明天下午3点”。。。因此,您需要忽略日期的时间部分。您可以通过格式化日期而不设置时间来实现这一点。此外,如果要检查某个日期是否“小于或等于明天”(无论何时),请检查该日期是否“严格小于后天”:

string filter=string.Format(CultureInfo.InvariantCulture,
“日期>={0:MM/dd/yyyy}和日期<{1:MM/dd/yyyy}”,
昨天
明天。添加天(1));

日期比较将时间考虑在内。例如,“今天中午”比“今天”更重要。如果使用
DateTime.Now
,则包含时间。因此,如果
DateTime.Now
是“今天中午”,那么
明天=今天。AddDays(1)
小于“明天下午3点”。。。因此,您需要忽略日期的时间部分。您可以通过格式化日期而不设置时间来实现这一点。此外,如果要检查某个日期是否“小于或等于明天”(无论何时),请检查该日期是否“严格小于后天”:

string filter=string.Format(CultureInfo.InvariantCulture,
“日期>={0:MM/dd/yyyy}和日期<{1:MM/dd/yyyy}”,
昨天
明天。添加天(1));

您在更新中发布的代码不等同于行筛选器。 行过滤器使用当前区域性的常规格式格式化日期。这可能不包括秒的分数-因此,除非您碰巧调用DateTime。现在在第二个边界上,您的
明天
值将超出筛选器指定的范围几秒的分数

也就是说,如果明天的
值为'2009-12-23 01:02:03.456',则行筛选器只接受小于等于'2009-12-23 01:02:03'的值,比明天指定的值早几秒


如果您只想比较日期,则应使用DateTime.Date从日期中截断时间组件(并使用DateTime.Today而不是DateTime.Now作为当前日期)。

您在更新中发布的代码与行筛选器不同。 行过滤器使用当前区域性的常规格式格式化日期。这可能不包括秒的分数-因此,除非您碰巧调用DateTime。现在在第二个边界上,您的
明天
值将超出筛选器指定的范围几秒的分数

也就是说,如果明天的
值为'2009-12-23 01:02:03.456',则行筛选器只接受小于等于'2009-12-23 01:02:03'的值,比明天指定的值早几秒


如果您只想比较日期,则应使用DateTime.Date从日期中截断时间组件(并使用DateTime.Today而不是DateTime.Now作为当前日期)。

在未设置时间时可以正常工作(例如使用DateTime.Today)。但这还不够。你的建议——这不是解决办法。这在未设置时间时有效。但是为什么它不与时间一起工作呢?为什么运算符>=在未设置时间时工作正常(例如使用DateTime.Today)。但这还不够。你的建议——这不是解决办法。这在未设置时间时有效。但是为什么它不与时间一起工作呢?为什么运算符>=工作和
DateTime today = DateTime.Today;
string filter = string.Format(CultureInfo.InvariantCulture,
                "Date >= #{0:MM/dd/yyyy}# AND Date < #{1:MM/dd/yyyy}#",
                yesterday,
                tomorrow.AddDays(1));