Как получить дни в диапазоне - PullRequest
1 голос
/ 30 августа 2011

У меня есть два диапазона дат даты 27.08.2011 и 31.08.2011, как я могу получить получить все дни?вот так: 28.08.2011, 29.08.2011 и 8/30/2011

спасибо

Ответы [ 4 ]

4 голосов
/ 30 августа 2011

Вот фрагмент кода для получения всех дней между начальной и конечной датой включительно:

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
3 голосов
/ 30 августа 2011

Чтобы завершить работу davecoulter, если вам нужно сделать это во всем приложении для объектов 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;
    }
}

Вы можете скопировать это прямо в LinqPad и запустить как программу, чтобы проверить это.

3 голосов
/ 30 августа 2011
using System;
using System.Linq;

var startDate = new DateTime(2011, 9, 1);
var days = Enumerable.Range(0, 10).Select(n => startDate.AddDays(n));
1 голос
/ 30 августа 2011

Создайте новую дату из обоих datetime datetime, чтобы убедиться, что они в начале дня.Затем запустите цикл for, который работает от starttime.Ticks до endtime.Ticks и увеличивает его на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...