c#获取下一个执行日期时间

时间:2017-10-31 13:11:43

标签: c# datetime scheduled-tasks

我有以下代码:

Dictionary<DayOfWeek, List<TimeSpan>> Daily = new Dictionary<DayOfWeek, List<TimeSpan>>();

我的想法是,我可以在Daily字典中添加一天的时间。但是一份工作可以在同一天不止一次执行。

所以每日看起来像这样:

{ "Monday" : [{"Hour":10, "Minute": 15}, {"Hour": 8, "Minute":5}] }

现在我想获得下一个执行日期时间。

private void UpdateNextExecutionTime()
    {
        TimeSpan t = new TimeSpan(15, 15, 0);
        DayOfWeek current = DateTime.Now.DayOfWeek;

        DayOfWeek tmp = current;
        TimeSpan time = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

        int cur = (int)current;
        for(int i = 0; i < 7; i++) {
            if(Daily.ContainsKey((DayOfWeek)cur)) {
                tmp = (DayOfWeek)cur;

                /* stuck */

                continue;
            }

            cur++;
            if (cur >= 7)
                cur = 0;
        }
    }

我设法在每日词典中获得了第一天(包括今天),但我仍然没有花时间。

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

假设t是您正在使用的时间作为您希望找到下一个执行时间的点,请将其置于“卡住”的位置(编辑;只是意识到您已更改为使用{列表中的{1}}:

TimeSpan

答案 1 :(得分:0)

您也可以在TimeSpan中度过一天,

以下是查找下一个日期的简单示例:

var schedule = new List<TimeSpan>{
    new TimeSpan(0,16,30,0),
    new TimeSpan(1,16,30,0),
    new TimeSpan(5,16,30,0)
};

var monday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + 1);
var fromMonday = DateTime.Now - monday;
var next = schedule.OrderBy(t => t).FirstOrDefault(t => t > fromMonday);

Console.Write(monday + next - DateTime.Now);