在C#中计算重复日期的正确方法
在我的项目中,我需要计算重复事件的日期.一开始我只有一个开始日期/时间以及该事件必须重复的信息:
Every Day Every Week Every 2 Weeks Every 3 Weeks Every Month Every 2 Months ... 这样做的正确方法是什么?它应该可以正常使用不同的时区和日节省时间设置.我想我应该在本地DateTime中添加几天/几周/月,然后将其转换为UTC.但我不确定这一点.如果我添加几天会发生什么,这将是我们需要向前调整我们的时钟一小时的时间.在这种情况下,此时间不存在. 下面是我写的代码,但我不确定它在每种情况下都能正常工作: private static List<DateTime> FindOccurrences(DateTime localStart,Repeat repeat,int occurrences) { var result = new List<DateTime> { localStart }; switch (repeat) { case Repeat.Daily: for (int i = 1; i <= occurrences; i++) result.Add(localStart.AddDays(i)); break; case Repeat.Every2Weeks: for (int i = 1; i <= occurrences; i++) result.Add(localStart.AddDays((7 * 2) * i)); break; ... } return result; } public List<Event> CreateRepeating(string timeZone,int repeatEnds,DateTime localStart,int eventDuration) { var events = new List<Event>(); var occurrences = FindOccurrences(localStart,repeat,repeatEnds); foreach (var occurrence in occurrences) { var item = new Event(); item.Start = occurrence.ToUtcTime(timeZone); item.End = occurrence.ToUtcTime(timeZone).AddMinutes(eventDuration); events.Add(item); } return events; } PS: 解决方法
安排或计算未来事件的日期,尤其是重复发生的事件,是一个非常复杂的主题.虽然从其他语言的角度来看,我已经写了几次这样的文章(参见:
1,2,3,4).
我担心这个主题过于宽泛,无法为您提供准确的代码.详细信息将特定于您的应用程序.但这里有一些提示. 一般来说: >仅将UTC用于发生单个事件实例的预计时刻. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |