Я пытаюсь создать список промежутков времени между двумя промежутками времени. Например

23:55 -> 00:10

Должен дать мне

23:55
00:00
00:05
00:10

Это мой код, но я получаю исключение нехватки памяти

var times = new List<TimeSpan>();
int interval = 5;
TimeSpan start = TimeSpan.Parse("23:55");
TimeSpan end = TimeSpan.Parse("00:00");
DateTime datum = new DateTime();
for (var dt = start; dt <= end; dt = datum.AddMinutes(interval) - datum)
{
   times.Add(dt);
}
-2
totalitarian 13 Июл 2014 в 01:23

3 ответа

Лучший ответ

Вы должны сравнивать даты с временными интервалами. Например, в вашем коде dt <= end будет ложным с самого начала, потому что 23:55 больше, чем 00:10. Вместо этого попробуйте это, используя datetime (создавая фиктивные даты, как я, или если вы стоите за этим примером, используя время лучше, как только вы это увидите, вы поймете):

var times = new List<TimeSpan>();
double interval = 5;
//TimeSpan start = TimeSpan.Parse("23:55");
//TimeSpan end = TimeSpan.Parse("00:10");
DateTime starting = new DateTime(2014, 1, 1, 23, 55, 0);
DateTime ending = new DateTime(2014, 1, 2, 0, 10, 0);
for (var ts = starting; ts <= ending; ts = ts.AddMinutes(interval))
{
    times.Add(ts.TimeOfDay);
}

Выход:

23:55
00:00
00:05
00:10
1
terrybozzio 13 Июл 2014 в 00:09

Я подозреваю, что ваш цикл бесконечен из-за этого:

dt = datum.AddMinutes(interval) - datum

datum никогда не менялся так же хорошо, как interval, поэтому dt всегда имеет одно и то же значение.

Более чистый подход, использующий Linq вместо циклов, можно использовать следующим образом:

TimeSpan diff = end - start;
var times = Enumerable
           .Range(0, (int)(diff.Minutes / interval) + 1)
           .Select(x => start.Add(TimeSpan.FromMinutes(interval * x)))
           .ToList();
1
Selman Genç 12 Июл 2014 в 21:46

Ваше значение датума здесь никогда не меняется, поэтому вы повторяете одно и то же время снова и снова. Вы не идете от начала до конца, вы переходите от датума (который начинается как сейчас), а затем на каждой итерации устанавливает dt в datum.addMinutes (interval) - datum.

2
shortstuffsushi 12 Июл 2014 в 21:30