我有两个日期时间范围8/27/2011和8/31/2011我怎样才能获得所有日子?那样:2011年8月28日,2011年8月29日和2011年8月30日
感谢
答案 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方法。