如何获得范围内的日子

时间:2011-08-29 23:30:54

标签: c# datetime

我有两个日期时间范围8/27/2011和8/31/2011我怎样才能获得所有日子?那样:2011年8月28日,2011年8月29日和2011年8月30日

感谢

4 个答案:

答案 0 :(得分:4)

以下是一个代码段,用于获取开始日期和结束日期之间的所有日期:

DateTime today = new DateTime(2011, 8, 29);
DateTime nextWeek = new DateTime(2011, 9, 4);

TimeSpan difference = nextWeek - today;

List<DateTime> days = new List<DateTime>();

for (int i = 0; i <= difference.Days; i++)
{
   days.Add(today.AddDays(i));
}

foreach (var dateTime in days)
{
   Console.WriteLine(dateTime);
}
Console.ReadLine();

输出:

8/29/2011 12:00:00 AM
8/30/2011 12:00:00 AM
8/31/2011 12:00:00 AM
9/1/2011 12:00:00 AM
9/2/2011 12:00:00 AM
9/3/2011 12:00:00 AM
9/4/2011 12:00:00 AM

答案 1 :(得分:3)

using System;
using System.Linq;

var startDate = new DateTime(2011, 9, 1);
var days = Enumerable.Range(0, 10).Select(n => startDate.AddDays(n));

答案 2 :(得分:3)

如果您需要在DateTime对象的应用程序中执行此操作,那么您可能需要为DateTime对象定义一个extenion方法。

void Main()
{
    DateTime today = new DateTime(2011, 8, 29);
    DateTime nextWeek = new DateTime(2011, 9, 4);

    foreach (DateTime dateTime in today.ListAllDates(nextWeek))
    {
       Console.WriteLine(dateTime);
    }
    Console.ReadLine();
}

public static class DateTimeExtenions
{
    public static IEnumerable<DateTime> ListAllDates(this DateTime lhs, DateTime futureDate)
    {   
        List<DateTime> dateRange = new List<DateTime>();
        TimeSpan difference = (futureDate - lhs);
        for(int i = 0; i <= difference.Days; i++)
        {
            dateRange.Add(lhs.AddDays(i));
        }
        return dateRange;
    }
}

您可以直接将其复制到LinqPad并作为程序运行以进行测试。

答案 3 :(得分:1)

从日期时间datetime创建一个新日期,以确保它们在一天的开始时间。然后运行一个从starttime.Ticks到endtime的for循环。通过TimeSpan.TicksPerDay进行提示和增量,并创建一个新的DateTime,您可以将其添加到每个值的列表中。以下示例不包括结束日期,但您可以轻松解决此问题。

var start= new DateTime(2009,01,01).Ticks;
    var end= new DateTime(2009,01,10).Ticks;
    List<DateTime> dates = new List<DateTime>();
    for (var i = start; i < end; i+=TimeSpan.TicksPerDay) {
        dates.Add(new DateTime(i));
}

或者你可以在它们之间循环并调用AddDays方法。