检查时间是两次之间

时间:2011-02-16 13:00:21

标签: c#

我在数据库中有一个待办事项列表。每个项目都有一个待办事项,其中包含应该完成的时间。我想要做的是让我的C#应用​​程序遍历项目并检查项目是否应该在一小时前完成,在顶部。此外,申请人必须检查该项目是否应在一小时内完成。如果这两个选项中的任何一个为真,则必须向用户显示作业。

我该如何使这项工作?我想到了下面的方法,但是这将显示应该在一小时前完成的任何项目,或更多。我想要的项目应该已经完成​​,最多1小时前。

foreach (DataRow dr in dsValue.Tables[0].Rows)
{
    DateTime dt = Convert.ToDateTime(dr["tijd"]);

    if (dt > DateTime.Now.AddHours(-1) || dt < DateTime.Now.AddHours(1))
    {
        MessageBox.Show(dr["opdracht"].ToString());
    }
}

6 个答案:

答案 0 :(得分:2)

您的代码几乎可以正常工作 - 您希望这两个条件都成立,而不是其中任何一个,所以快速更改为:

foreach (DataRow dr in dsValue.Tables[0].Rows)
{
    DateTime dt = Convert.ToDateTime(dr["tijd"]);

    if (dt > DateTime.Now.AddHours(-1) && dt < DateTime.Now.AddHours(1))
    {
        MessageBox.Show(dr["opdracht"].ToString());
    }
}

......就够了。将逻辑移动到数据库可能(更高),或者至少在循环之外的“一小时前”和“一小时的时间”预先计算。

例如,如果您的SQL看起来有点像

DECLARE @HourAgo DATETIME
SET @HourAgo = DATEADD(HOUR,-1,GETDATE())
DECLARE @HoursTime DATETIME
SET @HoursTime = DATEADD(HOUR,1,GETDATE())
SELECT
    opdracht,
    [other columns]
FROM ExampleTable
WHERE
    opdracht BETWEEN @HourAgo AND @HoursTime

答案 1 :(得分:0)

如果您将两个日期差异化,则会获得TimeSpan,您可以查看它包含的天数,小时数,分钟数和秒数。

答案 2 :(得分:0)

有两件事突然袭击我......

  1. 这样的时间比较具有内在的风险。例如,考虑如果在夏令时切换之前创建任务会发生什么,并且之后的循环在之后运行。或者,如果计算机的时钟在过渡期间被更改(也许用户意识到它设置错误)。规范化时间(例如,将所有时间戳存储为UTC)将有助于防止这种情况,但它不能完全解决问题,特别是如果在过渡期间更改RTC。

  2. 在数据库中进行这种数据选择通常比在客户端进行更好。这意味着,让数据库返回“过期”任务列表,然后在客户端工作。

答案 3 :(得分:0)

这样可行:

if (dt < DateTime.Now && dt > DateTime.Now.AddHours(-1))
{
    MessageBox.Show(dr["opdracht"].ToString());
}

答案 4 :(得分:0)

我认为你的比较线应该是:

if (dt >= DateTime.Now.AddHours(-1) && dt <= DateTime.Now)

答案 5 :(得分:0)

您应该使用BETWEEN运算符过滤数据库中的数据。为此制作了数据库。