比较日期,寻找特定时间的下一个实例

时间:2012-06-11 13:36:22

标签: c# datetime nunit nservicebus

根据我的单位测试,我试图计算0400小时的下一个实例是什么时候返回;

public void when_given_a_date_i_should_return_next_time_of_day_that_equals_04_hrs()
{
    var dateTimeNow = new DateTime(2012, 6, 11, 14, 22, 0);
    var dateTimeExpected = new DateTime(2012, 6, 12, 4, 0, 0);

    Assert.AreEqual(dateTimeExpected, t.CalculateIncremental(dateTimeNow));
}

CalculateIncremental的要点是每24小时使用RequestUtcTimeout在凌晨04:00发布一条带有nservicebus的消息。这又一次触发了一些功能。

3 个答案:

答案 0 :(得分:3)

这样的事情:

private static DateTime GetNext4AM(DateTime input)
{
    var result = new DateTime(input.Year, input.Month, input.Day, 4, 0, 0);

    if (result > input)
    {
        return result;
    }
    else
    {
        return result.AddDays(1);   
    }
}

应该返回下一次出现的4 AM,这可能是在同一天(如果输入早于04:00)或下一次。但是:

  

点[..]是使用RequestUtcTimeout每24小时发布一条带有nservicebus的消息,正好是凌晨04:00。这又一次触发了一些功能。

您应该使用调度程序,例如Quartz.NET或Windows任务计划程序。

答案 1 :(得分:0)

检查dateTimeNow的小时,如果小于4,则返回其日期和4AM作为小时。如果是4或更多,则返回第二天的日期,并返回凌晨4点作为小时。决定你想要在4:00:00做什么 - 无论是今天还是下一天。

答案 2 :(得分:0)

var now = new DateTime();
var dateTimeExpected = new DateTime(now.GetFullYear(), 
    now.GetMonth(), now.GetDay(), 4, 0, 0);
if (dateTimeExpected.CompareTo(now) > 0)
    dateTimeExpected = dateTimeExpected.AddDays(1);