2012-06-11 33 views
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的一点是要发布的消息与nservicebus每24个小时,在使用RequestUtcTimeout正是凌晨04:00。这再次触发一些功能。

+1

好的......那么这有什么问题? –

+0

哦,jees。抱歉。因此,习惯于阅读我的方法名的同事,从而了解它的功能。方法应该返回等于04的下一个时间 - 需要算法来计算:) –

+1

但是你没有说过你已经尝试了什么,以及遇到了什么问题。只是给一个单元测试,并暗示“请为我实现这个”并不是真正的网站工作方式...... –

回答

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点的下一次出现,它可以是在同一天(如果输入比04:00更早)或下。然而:

点[..]是使用RequestUtcTimeout每隔24小时在正午04:00发布一条带有nservicebus的消息。这再次触发一些功能。

应该使用一个调度程序,像Quartz.NET或干脆Windows任务计划程序。

0

检查dateTimeNow的小时数,如果小于4,则将其日期和4AM返回为小时。如果是4或更多,则返回第二天的日期,以及4AM作为小时。决定你想要做什么4:00:00 - 今天或下一天。

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); 
+1

如果'下一个'04:00是今天(例如,如果当前时间是02:00,则这不起作用。 –