-1

可能重复:
查找给定范围的缺失日期
创建两个日期之间所有日期的数组或列表

DateTime从表示 adate of start和 a的数据类型的两个日期date of end

我需要返回一个数组或列表,其中包含 DateTime 格式的所有日期。

出于性能原因考虑更快的代码。任何人都可以用示例源代码指出我正确的方向吗?

例子

输入

startDate =  25/01/2013
endDate = 31/01/2013

结果

25/01/2013
26/01/2013
27/01/2013
28/01/2013
29/01/2013
30/01/2013
31/01/2013
4

4 回答 4

4

您可以使用Enumerable.Range

var startDate = new DateTime(2013, 1, 25);
var endDate = new DateTime(2013, 1, 31);
int days = (endDate - startDate).Days + 1; // incl. endDate 

List<DateTime> range = Enumerable.Range(0, days)
    .Select(i => startDate.AddDays(i))
    .ToList();

演示

于 2013-01-25T10:41:32.393 回答
1

您可以创建扩展方法:

public static IEnumerable<DateTime> GetDatesTo(this DateTime start, DateTime end)
{
    DateTime date = start;

    while(date <= end)
    {
        yield return date;
        date = date.AddDays(1);
    }
}

用法:

DateTime startDate = new DateTime(2013, 1, 25);
DateTime endDate = new DateTime(2013, 1, 31);

foreach(var date in startDate.GetDatesTo(endDate))
    Console.WriteLine(date);
于 2013-01-25T10:40:45.533 回答
1
using System;
using System.Collections.Generic;

namespace Demo
{
    public static class Program
    {
        public static void Main()
        {
            foreach (var date in DateRange(new DateTime(2013, 01, 25), new DateTime(2013, 01, 31)))
            {
                Console.WriteLine(date.ToShortDateString());
            }
        }

        public static IEnumerable<DateTime> DateRange(DateTime start, DateTime end)
        {
            for (DateTime date = start; date <= end; date = date.AddDays(1))
            {
                yield return date;
            }
        }
    }
}
于 2013-01-25T10:41:55.697 回答
0

linq 版本

        DateTime[] dates = { /*...25/01/2013, 26/01/2013*/ };
        DateTime start = DateTime.Parse("25/01/2013");
        DateTime end = DateTime.Parse("31/01/2013");
        var q = (from a in dates
                 where a.Date >= start.Date && a.Date <= end.Date
                 select a).ToList();
于 2013-01-25T10:41:35.490 回答