0

根据我的单元测试,我试图计算下一个 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 小时,在凌晨 04:00 使用 RequestUtcTimeout 使用 nservicebus 发布一条消息。这再次触发一些功能。

4

3 回答 3

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 小时在凌晨 04:00 使用 nservicebus 发布一条消息。这再次触发一些功能。

您应该为此使用调度程序,例如Quartz.NET或只是 Windows 任务调度程序。

于 2012-06-11T13:40:24.747 回答
0

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

于 2012-06-11T13:39:29.050 回答
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);
于 2012-06-11T13:40:31.370 回答