C# 如何在范围内获得天数

C# 如何在范围内获得天数,c#,datetime,C#,Datetime,我有两个日期时间范围,分别为2011年8月27日和2011年8月31日。我如何安排所有日期?比如:2011年8月28日、2011年8月29日和2011年8月30日 谢谢从datetimes和datetime创建一个新日期,以确保它们位于一天的开始。然后运行从starttime.Ticks到endtime.Ticks的for循环,并按TimeSpan.TicksPerDay递增,然后创建一个新的日期时间,将其添加到每个值的列表中。下面的示例不包括结束日期,但您可以轻松地修复它 var start=

我有两个日期时间范围,分别为2011年8月27日和2011年8月31日。我如何安排所有日期?比如:2011年8月28日、2011年8月29日和2011年8月30日


谢谢

从datetimes和datetime创建一个新日期,以确保它们位于一天的开始。然后运行从starttime.Ticks到endtime.Ticks的for循环,并按TimeSpan.TicksPerDay递增,然后创建一个新的日期时间,将其添加到每个值的列表中。下面的示例不包括结束日期,但您可以轻松地修复它

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));
}
var start=newdatetime(2009,01,01);
var end=新的日期时间(2009,01,10);
列表日期=新列表();
对于(变量i=开始;i<结束;i+=TimeSpan.TicksPerDay){
添加(新的日期时间(i));
}

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

从datetimes和datetime创建一个新日期,以确保它们都在一天的开始。然后运行从starttime.Ticks到endtime.Ticks的for循环,并按TimeSpan.TicksPerDay递增,然后创建一个新的日期时间,将其添加到每个值的列表中。下面的示例不包括结束日期,但您可以轻松地修复它

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));
}
var start=newdatetime(2009,01,01);
var end=新的日期时间(2009,01,10);
列表日期=新列表();
对于(变量i=开始;i<结束;i+=TimeSpan.TicksPerDay){
添加(新的日期时间(i));
}

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

下面是一段代码片段,用于获取开始日期和结束日期之间的所有日期(包括开始日期和结束日期):

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();

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

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();

为了利用DaveCourter,如果需要在应用程序中为DateTime对象执行此操作,您可能需要为DateTime对象定义一个扩展方法

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;
    }
}
void Main()
{
DateTime today=新的日期时间(2011,8,29);
DateTime nextWeek=新的日期时间(2011,9,4);
foreach(今天的DateTime DateTime.listaldates(nextWeek))
{
Console.WriteLine(日期时间);
}
Console.ReadLine();
}
公共静态类DateTimeExtensions
{
公共静态IEnumerable ListalDates(此DateTime lhs、DateTime futureDate)
{   
列表日期范围=新列表();
时间跨度差=(futureDate-lhs);

对于(int i=0;i以借助DaveCourter,如果您需要在整个应用程序中为DateTime对象执行此操作,您可能需要为DateTime对象定义一个扩展方法

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;
    }
}
void Main()
{
DateTime today=新的日期时间(2011,8,29);
DateTime nextWeek=新的日期时间(2011,9,4);
foreach(今天的DateTime DateTime.listaldates(nextWeek))
{
Console.WriteLine(日期时间);
}
Console.ReadLine();
}
公共静态类DateTimeExtensions
{
公共静态IEnumerable ListalDates(此DateTime lhs、DateTime futureDate)
{   
列表日期范围=新列表();
时间跨度差=(futureDate-lhs);

对于(int i=0;我在这里回答得很好:这里回答得很好:很好!因为您返回了
IEnumerable
,所以我建议将其设置为
迭代器
方法,只需
返回lhs.AddDays(i);
。这样,您根本不需要
dateRange
,并且结果的评估是惰性的。(当您不需要遍历整个范围时可能很有用。)很好的一个!因为您返回了一个
IEnumerable
,所以我建议将它变成一个
迭代器
方法,只需
返回lhs.AddDays(I);
。这样,您根本不需要
dateRange
,并且结果会被惰性地评估。(在不需要遍历整个范围时可能很有用。)