【发布时间】:2017-10-31 13:11:43
【问题描述】:
我有以下代码:
Dictionary<DayOfWeek, List<TimeSpan>> Daily = new Dictionary<DayOfWeek, List<TimeSpan>>();
我的想法是我可以在 Daily 字典中添加一天和时间。但是一个作业可以在同一天执行多次。
所以 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;
}
}
我设法在 Daily 词典中找到了即将到来的第一天(包括今天),但我被困在获取时间上。
我怎么能做到这一点?
【问题讨论】:
-
为什么不改用
System.TimeSpan?我认为没有必要尝试滚动您自己的类型。 -
也就是说,尚不清楚您要做什么。显示您目前拥有的代码。
-
@Igor 将自定义类型替换为 Timespan,希望添加的代码能让事情更清晰。
-
您可以使用
DateTime.TimeOfDay获取代表DateTime的时间部分的TimeSpan,而不是使用所有单独的部分创建一个。 -
按排序顺序维护
TimeSpans 的列表(或在列表完成时对它们排序一次),然后检索下一个只是碰撞索引。但是,您可能会编写更多与调度相关的代码,而且这并非易事。考虑使用现有的解决方案,例如 this 或(如果您不介意矫枉过正的话)Quartz.NET。
标签: c# datetime scheduled-tasks