根据我的单位测试,我试图计算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的消息。这又一次触发了一些功能。
答案 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);