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

本文关键字:下一个 实例 定时间 日期 查找 比较 | 更新日期: 2023-09-27 18:36:52

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

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

像这样:

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)或下一个。然而:

要点 [..] 是每 24 小时使用 nservicebus 发布一条消息,正好在凌晨 04:00 使用 RequestUtcTimeout。这再次触发某些功能。

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

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

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