比较日期,查找特定时间的下一个实例
本文关键字:下一个 实例 定时间 日期 查找 比较 | 更新日期: 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);