每小时生成时间范围

时间:2013-10-31 15:19:35

标签: c#

我想从时间范围创建一个每小时的对象列表。

c#中是否有像python pandas.timerange这样的函数?

pandas.time_range("11:00", "21:30", freq="30min")

2 个答案:

答案 0 :(得分:4)

作为一种选择,利用MoreLInq Generate方法:

//variables used in both examples
var start = TimeSpan.FromHours(11);
var end = TimeSpan.FromHours(21).Add(TimeSpan.FromMinutes(30));

MoreEnumerable.Generate(start, span => span.Add(TimeSpan.FromMinutes(30)))
              .TakeWhile(span => span <= end)

“Native”Linq查询有点丑陋:

Enumerable.Range(0, int.MaxValue)
          .Select(multiplier => start.Add(TimeSpan.FromMinutes(30 * multiplier)))
          .TakeWhile(span => span <= end)

两个查询都产生:

11:00:00 
11:30:00 
12:00:00 
12:30:00 
13:00:00 
13:30:00 
14:00:00 
  ...
21:00:00 
21:30:00 

答案 1 :(得分:1)

这是一个函数,它采用开始/结束时间和以下之间的分钟数:

public IEnumerable<DateTime> GetTimeRange(DateTime startTime, DateTime endTime, int minutesBetween)
{
   int periods = (int)(endTime - startTime).TotalMinutes / minutesBetween;  
   return Enumerable.Range(0,periods+1)
                    .Select (p => startTime.AddMinutes(minutesBetween * p));
}

您可以在调用函数时解析初始字符串:

var times = GetTimeRange(DateTime.Parse("11:00"),DateTime.Parse("21:30"),30);