查找给定范围内的所有插槽

时间:2013-11-29 15:01:06

标签: c# sql sql-server datetime

如何查找范围内的所有日期位置..

从日期01- Jan -2014 00:00:00 A.M

开始

至今15-Oct-2014 00:00:00 P.M

事件开始日期03-Jan-2014 10:00 A.M每3天发生一次03,06,09等等

我需要使用c#

计算如下

03-JAN-2014

06-JAN-2014

09-JAN-2014

12-JAN-2014

等,等

如何在c#中完成此计算?尝试在数据库中失败,请检查Display next event date

2 个答案:

答案 0 :(得分:6)

正如我在评论中提到的,您可以使用DateTime.AddDays()方法;

DateTime dt1 = new DateTime(2014, 1, 1);
DateTime dt2 = new DateTime(2014, 10, 15);
DateTime start = new DateTime(2014, 1, 3);

while (start < dt2)
{
    Console.WriteLine(start.ToString("dd-MMM-yyyy"));
    start = start.AddDays(3);
}

这里有 demonstration

如果您想同时显示1 5-Oct-2014,只需将start < dt2条件更改为start <= dt2

输出将是;

03-Jan-2014
06-Jan-2014
09-Jan-2014
12-Jan-2014
15-Jan-2014
18-Jan-2014
21-Jan-2014
24-Jan-2014
27-Jan-2014
30-Jan-2014
02-Feb-2014
05-Feb-2014
08-Feb-2014
11-Feb-2014
14-Feb-2014
17-Feb-2014
20-Feb-2014
23-Feb-2014
26-Feb-2014
01-Mar-2014
04-Mar-2014
07-Mar-2014
10-Mar-2014
13-Mar-2014
16-Mar-2014
19-Mar-2014
22-Mar-2014
25-Mar-2014
28-Mar-2014
31-Mar-2014
03-Apr-2014
06-Apr-2014
09-Apr-2014
12-Apr-2014
15-Apr-2014
18-Apr-2014
21-Apr-2014
24-Apr-2014
27-Apr-2014
30-Apr-2014
03-May-2014
06-May-2014
09-May-2014
12-May-2014
15-May-2014
18-May-2014
21-May-2014
24-May-2014
27-May-2014
30-May-2014
02-Jun-2014
05-Jun-2014
08-Jun-2014
11-Jun-2014
14-Jun-2014
17-Jun-2014
20-Jun-2014
23-Jun-2014
26-Jun-2014
29-Jun-2014
02-Jul-2014
05-Jul-2014
08-Jul-2014
11-Jul-2014
14-Jul-2014
17-Jul-2014
20-Jul-2014
23-Jul-2014
26-Jul-2014
29-Jul-2014
01-Aug-2014
04-Aug-2014
07-Aug-2014
10-Aug-2014
13-Aug-2014
16-Aug-2014
19-Aug-2014
22-Aug-2014
25-Aug-2014
28-Aug-2014
31-Aug-2014
03-Sep-2014
06-Sep-2014
09-Sep-2014
12-Sep-2014
15-Sep-2014
18-Sep-2014
21-Sep-2014
24-Sep-2014
27-Sep-2014
30-Sep-2014
03-Oct-2014
06-Oct-2014
09-Oct-2014
12-Oct-2014

答案 1 :(得分:1)

如果您想使用LINQ,那么您可以这样做:

DateTime dtStart = new DateTime(2014, 1, 1);
DateTime dtEnd = new DateTime(2014, 10, 15);

int difference = 3;
List<DateTime> result = new List<DateTime>(new[] { dtStart });
result.AddRange(Enumerable.Range(0, (dtEnd - dtStart).Days / difference)
                           .Select(r => dtStart = dtStart.AddDays(difference)));